我有以下架构:
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()
关于您目前的关系:
由于current_revision仅指向修订表上的一条记录,因此您可以期望您的关系返回一个修订版本模型,而不是集合。
之所以要获取字段内容而不是模型,是因为您的字段和关系使用相同的名称。因此,当您要求时$model->current_revision
,Laravel会为您提供数据库中该字段的值。
解决此问题的最简单方法是重命名数据库列或关系名称。我通常将_id附加到外键列上,这样永远不会有问题。
关于逆关系:
即使该列可以为空,也可以用相同的方式定义关系。如果没有任何模块与一个修订版相关,$revision->module
例如,将仅返回null。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句