Соглашения о присвоении имен отношениям ORM Laravel Eloquent ORM

Определяя обратное отношение в 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 .