Проблема с Codeigniter в базе данных - PullRequest
2 голосов
/ 09 февраля 2010

Это моя модель:

    function getGalleryListing()
{
    $this->db->select('photo.id,photo.src,photo.title,photo.user_id,users.id,users.username');
    $this->db->from('photo');
    $this->db->join('users', 'users.id = photo.user_id');
    $query = $this->db->get();
    return $query->result();
}

И мой контроллер:

    function index()
{       
    $data['gallery_list'] = $this->Gallery_model->getGalleryListing();
    $data['content'] = $this->load->view('gallery/index', $data, true);
    if ($this->dx_auth->is_logged_in()) 
    {

        $this->load->view('template_login', $data);
    }
    else
    {
        $this->load->view('template', $data);
    }

}

Проблема в том, что когда я делаю <?= $gallery->id ?>, он продолжает показывать мне идентификатор из USERS.ID вместо PHOTO.ID. Я что-то упустил? Спасибо за любую помощь.

Ответы [ 3 ]

2 голосов
/ 09 февраля 2010

Вы выбираете два идентификатора (из фотографий и пользователей), и отображается только последний. Вам нужно использовать псевдоним с As, чтобы назначить другое имя одному из идентификаторов, и таким образом он успешно покажет вам необходимый идентификатор. Например, ваш запрос должен выглядеть следующим образом:

select (photo.id) as photo_id,photo.src,photo.title,photo.user_id,users.id,users.username from photo inner join users on users.id = photo.user_id

Теперь <?= $gallery->photo_id ?> выдаст вам удостоверение личности с фотографией, а <?= $gallery->id ?> даст вам идентификатор пользователя.

Примечание: Вы можете изменить вышеуказанный запрос в перспективе CI или использовать его как есть, если можете. Спасибо

0 голосов
/ 22 февраля 2010

Во многих случаях, когда я сталкивался с проблемами при использовании функции JOIN CodeIgniter, я закончил тем, что написал свою собственную команду SQL, если вы знакомы с SQL. Это дает вам лучший контроль, чем сама функция соединения.

0 голосов
/ 09 февраля 2010

Я использую DataMapper OverZealous Edition
Если у пользователя есть отношение «один ко многим», объявленное на фотографии, тогда вы должны использовать следующее: Внутри пользовательской модели:
$this->photo->get()->all

В противном случае что-то вроде:
$user = $this->user->where('id', 1)->first();
$photos = $user->photo->get()->all;

Кстати, вы уверены, что таблица не называется фотографиями, а не фотографиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...