2015-12-26 86 views
1

我有以下模式:如何在Laravel 5中为这种关系创建模型?

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

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

current_revision领域的一个版本ID或者引用或设置为null。

我的问题是我如何在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会读取方法名称或其他内容。感谢您清除混淆! –