0

PHP 経由でデータベースからリストを作成したいと思います (CodeIgniter を使用しています)。

これが私のデータベースです:

CREATE DATABASE IF NOT EXISTS `flux_demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE `flux_demo`;

CREATE TABLE IF NOT EXISTS `people` (
  `people_id` int(11) NOT NULL AUTO_INCREMENT,
  `Active` int(1) DEFAULT NULL,
  `Login` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `Password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `Mail` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `Name` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `Bio` text COLLATE utf8_unicode_ci NOT NULL,
  `Register Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Last Activity` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Thumbnail` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`people_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `projects` (
  `project_id` int(11) NOT NULL AUTO_INCREMENT,
  `Project` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `Description` text COLLATE utf8_unicode_ci NOT NULL,
  `Status` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `Thumbnail` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `Start Date` date NOT NULL,
  `End Date` date NOT NULL,
  PRIMARY KEY (`project_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `assigned_projects_ppeople` (
  `people_id` int(11) NOT NULL,
  `project_id` int(11) NOT NULL,
  PRIMARY KEY (`people_id`,`project_id`),
  FOREIGN KEY (people_id) REFERENCES people (people_id),
  FOREIGN KEY (project_id) REFERENCES projects (project_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ご覧のとおり、多対多のテーブルを使用して、プロジェクトと人の関係を作成します。CodeIgniter では、セッション クラスを使用してセッション データ ('id'、'Name'、'Login'、'Thumbnail') を保存します。私のビュー ページは、ul タグと li タグを使用した単純なリストです。

<?php 
    $this->load->model('project_model');
    $this->project_model->getProjectsForUser();
    echo "<ul>";
    foreach($result as $r)
    {
        echo "<li><a href=http://www.domain.com/$r->Project>$r->Project</a></li>";
    }
    echo "</ul>";
?>

私の質問は、セッション ユーザーと一致するリストを作成するにはどうすればよいですか? 私の uri セグメントは次のようになります: http://domain.com/project_name

再編集: モデルを作成しました:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Project_model extends CI_Model{

    public function getProjectsForUser()
{
    $query = $this->db->query(
            'SELECT r.project_id, r.Project
            FROM assigned_projects_ppeople a JOIN people p
            ON a.people_id = p.people_id JOIN projects r
            ON a.project_id = r.project_id
            GROUP BY r.project_id, r.Project'
            );
    $data = $query->row_array();
    return $data;
}
}
?>

何か案が ?

ありがとうございました !

4

2 に答える 2

0

やっと成功します。終わってみれば、難しくなかったことがわかります。

データベースにクエリを実行する関数は次のとおりです。

public function getProjectsForUser()
    {
        $login_id = $this->session->userdata('User_id');
        $this->db->select('Project');
        $this->db->from('assigned_projects_ppeople a');
        $this->db->where('people_id', $login_id);
        $this->db->join('projects r', 'r.project_id = a.project_id');
        $query = $this->db->get();

        return $query;
    }

次に、コントローラー ページで変数を定義しました。

$this->load->model('project_model');
$query = $this->project_model->getProjectsForUser();
$args['available_projects'] = $query->result();
$this->load->view('home', $args);

ビューページに挿入する最終的なコードは次のとおりです。

<?php
    echo "<ul>";
    foreach($available_projects as $r)
    {
        echo '<li><a href="'.base_url($r->Project).'">'.$r->Project.'</a></li>';
    }
    echo "</ul>";
?>

そのような URI を使用する方法を定義する必要があります。

http://localhost/project/project_id

ブログのやり方みたいな感じなので勉強してみます。

ご協力ありがとうございました !

于 2013-11-06T20:20:06.257 に答える