我认为两种雄辩的关系基本上没有区别,但工作方式不同......我找不到我错过的东西..
有三个模型*.test.com
*.hello.com
,Concept
,Attribute
。这些模型有自己的MySQL表Status
,concepts
,attributes
。
概念表
属性表
状态表
为了定义雄辩的关系,我按如下方式排序。
statuses
有很多Concept
Attribute
有很多Concept
很自然地,我在每个模型上双向编写每个关系。
内部模型Status
文件..
Concept.php
在public function attributes()
{
return $this->hasMany('App\Attribute');
}
public function statuses()
{
return $this->hasMany('App\Status');
}
文件内..
Attribute.php
在public function concept()
{
return $this->belongsTo('App\Concept');
}
文件内..
Status.php
使用方法public function parent()
{
return $this->belongsTo('App\Concept');
}
时会出现问题。
在$concept->attributes
档案..
Concept.php
据我所知,当执行第一个public function inherit()
{
// Copy basic concept data. (name, description, etc.)
$children = $this->replicate();
$children->name .= ' (Inherited)';
$children->inherit_parent_id = $this->id;
$children->inherit_origin_id = $this->inherit_origin_id ?? $this->id;
$children->save();
// Inherit Statuses
foreach( $this->statuses as $status ) {
$status->inheritTo( $children );
};
// Inherit Attributes
foreach( $this->attributes as $attribute ) {
$attribute->inheritTo( $children );
};
return $children;
}
时,foreach
会返回$this->statuses
个对象。但是,在第二个Collection
块上,foreach
返回$this->attributes
个对象。所以我尝试Concept
然后就可以了。
为什么这两个$this->attributes()->get()
块的工作方式不同?
答案 0 :(得分:3)
$this->attributes
是Model
类的继承属性。所以它显示了这些关系。
如果您重命名函数以引用该关系,那么它应该适合您。
内部模型Concept.php文件(只是一个示例名称)
public function rel_attributes()
{
return $this->hasMany('App\Attribute');
}
你指的是这样的关系:
// Inherit Attributes
foreach( $this->rel_attributes as $attribute ) {
$attribute->inheritTo( $children );
};
答案 1 :(得分:1)
我同意菲利普的回答。您需要始终以雄辩的方式定义不会覆盖默认变量的关系。