Определяя обратное отношение в Eloquent, вы должны называть свою динамическую собственность такой же, как ваша родственная модель?
class Book extends Eloquent { public function author() { return $this->belongsTo('Author'); } } $books = Book::all() foreach ($books as $book) { echo $book->author->firstname; }
В приведенном выше примере мне нужно вызвать этого автора метода или я могу назвать его чем-то другим? Я пытался назвать его чем-то другим (просто из любопытства), но затем возвращает null, следовательно, ошибки «Попытка получить свойство не-объекта».
EDIT: Я получил его, чтобы работать, передав внешний ключ в свойству. Вот так:
класс Книга расширяет Eloquent {
public function daauthor() { return $this->belongsTo('Author', 'author_id'); } } $book = Book::find(55); dd($book->daauthor);
Может кто-нибудь объяснить, почему?
Метод принадлежит. Пытается определить атрибут, который ссылается на модель автора . Для этого Laravel использует имя функции вызывающего.
Поэтому в вашем коде Laravel видит функцию daauthor и пытается использовать атрибут daauthor_id в таблице книг для полного запроса. Поскольку ваша таблица книг не имеет этого атрибута, она терпит неудачу.
Установив $ foreignKey в методе, вы можете переопределить поведение по умолчанию:
public function daauthor() { return $this->belongsTo('Author', 'author_id'); }
Для получения дополнительной информации ознакомьтесь с исходным кодом \ Illuminate \ Database \ Eloquent \ Model .