2013-08-16 3 views
0

Я видел following post, и я пытаюсь использовать его для моих запросов, но я использую две разные таблицы.Получение дополнительного поля из разных таблиц

  • У меня есть моя таблица логинов, в которой используется logins_model, и у меня есть таблица пользователей.
  • Внутри таблицы логинов он содержит только регистрационную информацию, необходимую для входа пользователя в систему.
  • В настоящее время у меня есть адрес электронной почты как способ входа пользователя в поле пароля.
  • В таблице моих пользователей он содержит всю личную информацию о пользователе.

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

Я пытаюсь выяснить, как я могу собрать это поле адреса электронной почты, когда выполняю первоначальный запрос.

Адрес GitHub repo for MY_Model from Jamie Rumbelow.

У кого-нибудь есть предложения по этому вопросу? Я бы, конечно, это оценил.

Я надеюсь, что кто-то еще может пролить некоторое дополнительное понимание, которое имеет рабочие знания о MY_Model.

Я все еще борется с этим весь день и хотел бы получить любые другие предложения, которые кто-то предложит.

EDIT:

Я обнаружил, что я могу могу сделать дополнительную функцию, однако он ставит только поле адреса электронной почты в объект вместо адреса электронной почты с данными таблицы пользователей. Есть ли что-то я "м делаю неправильно.

$user_data = $this->user->with_email_address()->get_by('user_id', $user_id); 

public function with_email_address() 
{ 
    $this->db->join('logins', 'logins.user_id = users.user_id'); 
    $this->db->select('logins.email_address AS email_address'); 

    return $this; 
} 

ответ

2

Если вы собираетесь обеспечить функцию в модели вернуть всю информацию с адресом электронной почты, вы должны выбрать все поля для JOIN ,

Попробуйте это:

public function with_email_address($user_id) 
{ 

    $this->db->join('logins', 'logins.user_id = users.user_id'); 
    $this->db->select('users.*'); 
    $this->db->select('logins.email_address AS email_address'); 

    return parent::get_by('user_id', $user_id); 
} 
+0

Я все еще делаю $ user_data = $ this-> user-> with_email_address() -> get_by ('user_id', $ user_id); – user2576961

+0

Вам не нужно. Просто вызовите эту функцию, а не другую. –

+0

Я бы предположил, что было бы для него способом получить только одно поле в этой таблице, а затем сделать оригинал. – user2576961

2

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

Здесь вы можете найти дополнительную информацию о сессиях:.

http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

Если вы все еще считаете, что используете несколько запросов, вы можете написать функцию в одной из ваших моделей, которая вернет массив с данными пользователя.

EDIT: вы также можете присоединиться к результатам в одном запросе, так что вам нужен только один запрос. Вот хороший старт:

http://ellislab.com/codeigniter/user-guide/database/examples.html

+0

Я думал о добавлении его в данную сессии, однако я плотно на то, что я кладу в данной сессии, как я предпочитаю только поставить идентификатор пользователя. Я предпочитаю делать несколько запросов, но мне интересно, как это сделать с помощью MY_Model, который я предоставил. – user2576961

+0

Вы когда-нибудь использовали MY_Model, о котором я говорил? – user2576961