我有一个雄辩的问题,当我打电话给$unit->assets
我收到一个空集合。但是,如果我打电话给$unit->assets()->get()
- 我会收到一个正确结果的集合。
根据文档我的关系被正确定义,这似乎很明显,因为我在关系对象上调用get()
时得到了正确的结果。
class Unit extends Model
{
protected $table = 'organisation_units';
public function assets()
{
return $this->hasMany(MediaElement::class, 'owner_id');
}
}
class MediaElement extends Model
{
protected $table = 'template_elements';
public function owner()
{
return $this->belongsTo(Unit::class, 'owner_id');
}
}
表结构是
organisation_units
id |名称
template_elements
id | owner_id |名字|文件名
事实证明,我使用“资产”作为关系方法名称。 “assets”必须是模型或其他内容中保留或已使用的关键字。当我找到确切原因时,会更新帖子。
方法名称“colors”和“templates”也有同样的问题。
这里真正的问题是我在会话中存储我的组织单位,当从会话中检索时,关系已经加载。
在保存到会话之前调用$model->fresh()
解决了问题。
感谢那些试图帮助的人。