2015-12-26 3 views
1

У меня есть следующая схема:Как создать модель для этих отношений в Laravel 5?

Modules 
======= 
id: PK 
current_revision: FK to Revisions.Id, nullable 

Revisions 
========= 
id: PK 

В current_revision поле либо ссылки на единый идентификатор версии или установить нулевое значение.

Мой вопрос: как правильно смоделировать эти отношения в Laravel.

Вот как я это сделал до сих пор:

class Module extends Model 
{ 
    public function current_revision() 
    { 
     return $this->belongsTo(Revision::class, 'current_revision'); 
    } 

} 

Однако, я не делал обратное в revision модели, так как могут быть изменения, не имеющие module, возложенные на него.

Это правильный способ моделирования отношений?

Также почему $module->current_revision не выводит коллекцию ревизий? Вместо этого он выводит содержимое поля.

Однако стоит отметить следующие работы штрафа: $module->current_revision()->getResults()

ответ

1

О текущих отношениях:

С current_revision указует только один запись на столе пересмотров, вы можете ожидать, что ваши отношения, чтобы вернуть один Модель пересмотра, а не коллекция.

Причина, по которой вы получаете содержимое поля, а не модель, заключается в том, что ваше поле и отношения имеют одно и то же имя. Итак, когда вы запрашиваете $model->current_revision, Laravel дает вам значение этого поля в базе данных.

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

О обратной связи:

Вы можете определить отношения таким же образом, даже если столбец обнуляемый. Если нет модулей, связанных с одной ревизией, $revision->module (например) просто вернет значение null.

+1

Большое спасибо. По какой-то причине я думал, что Laravel читает имя метода или что-то в этом роде. Спасибо, что освободил путаницу! –

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