2014-02-13 2 views
5

Определяя обратное отношение в Eloquent, вы должны назвать свое динамическое свойство таким же, как ваша родственная модель?Соглашения о присвоении имен Laravel Eloquent ORM

class Book extends Eloquent { 

    public function author() 
    { 
     return $this->belongsTo('Author'); 
    } 

} 

$books = Book::all() 
foreach ($books as $book) { 
    echo $book->author->firstname; 
} 

В приведенном выше примере, я должен вызвать этот метод автор или я могу назвать это что-то другое? Я пытался назвать его чем-то другим (просто из любопытства), но затем возвращает null, следовательно, ошибки «Попытка получить свойство не-объекта».

EDIT: Я получил его на работу, передавая внешний ключ belongsTo, как это:

класс Книга расширяет красноречивый {

public function daauthor() 
    { 
     return $this->belongsTo('Author', 'author_id'); 
    } 

} 

$book = Book::find(55); 
dd($book->daauthor); 

Может кто-нибудь объяснить, почему?

+0

Вы можете назвать все, что захотите :). Какая была ошибка и имя функции, которую вы пытались? –

+0

, если я изменяю Book :: author() в Book: daauthor() и назову его как: $ book-> daauthor, я возвращаю null. – skaterdav85

+0

Я могу переименовать свои красноречивые функции в любом случае, попробовал это в моем проекте Laravel4. Функция 'BelongsTo()' ничего не делает с именем вашей функции. Может быть, вы упустили что-то в своем коде? –

ответ

4

Метод belongsTo пытается определить атрибут, который связывает с Автор модели. Для этого Laravel использует имя функции вызывающего.

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

Устанавливая $ ForeignKey на методе вы можете изменить поведение по умолчанию:

public function daauthor() 
{ 
    return $this->belongsTo('Author', 'author_id'); 
} 

Для получения более подробной информации проверить исходный код \ Осветите \ Database \ Красноречивый \ Model.

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