Проблема контроллера с использованием базовой модели CRUD - PullRequest
0 голосов
/ 20 марта 2010

В CodeIgniter я использую базовый CRUD My_model , но у меня есть небольшая проблема в моем контроллере просмотра. Мои $ data ['posts'] получают все сообщения из таблицы, называемые "posts"».Хотя автор в этой таблице - просто user_id, поэтому мне нужно использовать мою функцию «getusername» (получает имя пользователя из идентификатора), чтобы получить имя пользователя из таблицы users.

Хотя я нене знаю, как двигаться дальше, поскольку это не просто один пост.Поэтому мне нужно, чтобы имя пользователя было частью массива $ data ['posts'] или какого-либо другого умного решения.

Кто-нибудь, кто может мне помочь?

 function index() {
  $this->load->model('browse_model');

  $data['posts'] = $this->browse_model->get_all();
  $data['user'] = $this->browse_model->getusername(XX);

  $this->load->view('header');
  $this->load->view('browse/index', $data);
  $this->load->view('footer');
 }

Ответы [ 2 ]

2 голосов
/ 21 марта 2010

Лучше всего было бы выбрать соответствующее имя пользователя при получении сообщений, присоединившись к таблице пользователей в таблице сообщений. Таким образом, вы выполняете только один запрос к базе данных. Вы можете переопределить функцию get_all базовой My_model.

function get_all()
{
    $sql = 'SELECT p.*, u.username
            FROM posts p
            JOIN users u ON u.user_id=p.user_id';

    $query = $this->db->query($sql);
    return $query->result();       
}

Каждый возвращенный объект post будет иметь свойство username.

$posts = $this->browse_model->get_all();
foreach ($posts as $post)
{
    echo $post->username;
}
1 голос
/ 21 марта 2010

Альтернативный способ сделать то же самое:

function get_all()
{
   $this->db
       ->select('posts.*, u.username')
       ->join('users u', 'u.user_id=posts.user_id');

   return parent::get_all();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...