2013-06-06 2 views
0

У меня возникли проблемы с доступом к отношениям в Laravel. В связи с этим вопросом у меня есть две таблицы: messages и users.Laravel Eloquent ORM: проблема с one-to-many using own_to()

В таблице messages выглядит следующим образом:

Messages: id, user_from, user_to, read, message, created_at, updated_at 

В таблице users выглядит следующим образом:

Users: id, email, password, name, created_at, updated_at, bio, reputation, last_login_ip, last_seen, active 

В user_from и user_to столбцы являются Интс, которые соответствуют id пользователя (первичного ключа) который отправил сообщение или кому было отправлено сообщение.

Соответствующая часть моей Message модели выглядит следующим образом:

class Message extends Eloquent { 

    //relationships 
    public function user_from() { 
     return $this->belongs_to('User', 'user_from'); 
    } 

    public function user_to() { 
     return $this->belongs_to('User', 'user_to'); 
    } 
} 

Соответствующая часть моей User модели выглядит следующим образом:

class User extends Eloquent { 

    //relationships 
    public function messages_from() { 
     return $this->has_many('Message', 'user_from'); 
    } 

    public function messages_to() { 
     return $this->has_many('Message', 'user_to'); 
    } 
} 

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

{{ $message->user_from->name }} 

, который выдает ошибку Trying to get property of non-object на этой одной строке. Я знаю, что объект $message определен, потому что все остальные свойства, кроме user_from и user_to, определены и распечатываются отлично. Я читал документацию несколько раз, и я не могу понять, что я сделал неправильно здесь ... кто-нибудь торчит кому-нибудь? Это похоже на пример учебника, но он не работает.

Как я уже передал данные на зрение:

$messages = Message::where('user_to', '=', Auth::user()->id)->take(20)->get(); 
+0

Чтобы уточнить, это Laravel 3. – wnajar

+0

Итак, если вы эхо вне $ message-> user_to вы получаете хотя бы идентификатор? Cuz, тогда вы могли бы просто обойти это так ... echo (User :: find ($ message-> user_from) -> name) .... Хотя было бы неплохо, чтобы отношения работали – KyleK

+0

Попытка этого прямо сейчас. * Редактировать: * да, эхо-сигнал '$ message-> user_from' дает мне идентификатор пользователя. Я думаю, просто не делает связи, что это соответствует модели User. Не идеальный вообще с SQL-запросом в представлении, но теперь попробуйте обходной путь ... – wnajar

ответ

0

Создание названия методов в Message модели from_user() и to_user() вместо user_from() и user_to() (и изменение вида переписываться) фиксирует проблема полностью. Никакой другой код не был изменен.

Laravel получает поле базы данных над именем метода, когда вы указываете настраиваемое поле (я думаю). Weird.

+1

oh wierd .... не знал, что – KyleK

+0

Я тоже ... – wnajar

 Смежные вопросы

  • Нет связанных вопросов^_^