Eloquent 关系集合未通过 属性 访问器返回,但如果我使用 relation()->get();

Eloquent relation collection not returning by property accessor but does if I use relation()->get();

我遇到了 eloquent 的问题,因此当我调用 $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');
    }
}

Table 结构是

organisation_units

编号 |姓名

template_elements

编号 | owner_id |姓名 |文件名

原来问题是我使用 "assets" 作为关系方法名称。 "assets" 必须是保留关键字或已在模型或其他内容中使用的关键字。当我找到确切原因时,将更新 post。

方法名称 "colors" 和 "templates" 也有同样的问题。

这里真正的问题是,我在会话中存储我的组织单元,当从会话中检索时,关系已经加载。

在保存到会话之前调用 $model->fresh() 解决了问题。

感谢那些试图提供帮助的人。