【问题标题】:Eloquent relation collection not returning by property accessor but does if I use relation()->get();雄辩的关系集合不会由属性访问器返回,但如果我使用关系()-> get();
【发布时间】:2019-04-24 15:58:25
【问题描述】:

我遇到了 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');
    }
}

表结构是

组织单位

标识 |名字

模板元素

标识 |所有者 ID |姓名 |文件名

【问题讨论】:

    标签: php laravel eloquent relationship database-normalization


    【解决方案1】:

    原来问题在于我使用“资产”作为关系方法名称。 “资产”必须是模型或其他东西中保留或已使用的关键字。当我找到确切原因时会更新帖子。

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

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

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

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

    【讨论】:

    • assets 作为关系名称为我工作。您是否在模型中使用了任何其他特征? organisation_units 表是否有 assets 列?
    • 没有具有这些名称的列,使用特征 HasSlug (sluggable) OwenIt\Auditable 和 SoftDeletes。它们都没有任何冲突的属性或方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2021-12-15
    • 2020-12-13
    • 1970-01-01
    • 2016-09-03
    • 2014-08-27
    相关资源
    最近更新 更多