首页 > 解决方案 > 如何防止在 Laravel 中加载 hasMany 关系?

问题描述

假设我有以下模型:

Machine.php(简化):

class Machine
{
    public function organization()
    {
        return $this->belongsTo(Organization::class);
    }
    public function readings()
    {
        return $this->hasMany(Reading::class);
    }
}

我想写一个查询来获取所有机器的数据,但不是hasMany关系。

目前,如果我在控制器中编写以下内容:return Machine::where('organization_id', Auth::user()->organization_id)->get();,生成的数组将如下所示:

[
    {
        "id": 1,
        "organization_id": 1,
        "readings": []
    },
    {
        "id": 2,
        "organization_id": 1,
        "readings": []
    }
]

如何readings从此输出中删除数组?我不仅想操作 JSON,因为从数据库中获取这些数据也需要相当长的时间。


编辑:所以不幸的是,我设法在我的 MCVE 中删除了罪魁祸首,这是 Machine 类上定义的属性,它readings在每种情况下都查询该字段。删除该属性解决了我的问题。(请参阅此问题下的评论。)

标签: phplaraveleloquent

解决方案


laravel 实际上在这里的文档中提到了这件事

您可以简单地将其添加到您的模型上

protected $hidden = ['readings'];

如果你需要在某个地方使用它,那么你可以使用 makeHidden 方法这样

Machines::somequery()->get()->makeHidden(['readings'])->toArray();

推荐阅读