用 Eloquent 查询关系

Posted

技术标签:

【中文标题】用 Eloquent 查询关系【英文标题】:Query Relations With Eloquent 【发布时间】:2021-06-10 11:52:08 【问题描述】:

我有 2 个模型。模型Contract有一个(关系)Company

Company 模型上,我有以下关系:

public function contracts()

    return $this->hasMany('App\Models\SGC\Contracts\Contract', 'held_by_company_id', 'id');

我正在尝试获取与公司关联的所有合同,但由于合同表有很多列,我只想检索 2 个。当我对关系执行函数时,合同为空。

所以,如果我查询合同上的所有内容,我会得到公司数据和相关合同:

$requested_company_data = Company::with('contracts')->findOrFail($request->company_id)->toArray();

考虑优化,因为我想要 2 列,所以我想选择 2 列。当我这样做时,关系是空的,但这是错误的,因为我知道公司 ID 2 有合同。

$requested_company_data = Company::with([
    'contracts' => function ($query) 
        $query->select('id', 'contract_code');
    
])->findOrFail($request->company_id)->toArray();

我真的没有看到错误...有人可以启发我吗? 谢谢。

【问题讨论】:

这篇 SO 帖子也可能有助于找到问题 ***.com/questions/38172857/… 【参考方案1】:

自 Laravel 5.5 起,您可以使用 with:column1,column2 指定列:

$requested_company_data = Company::with('contracts:id,contract_code')
            ->findOrFail($request->company_id)
            ->toArray();

【讨论】:

以上是关于用 Eloquent 查询关系的主要内容,如果未能解决你的问题,请参考以下文章

Eloquent - 可以在查询时动态创建关系

Laravel 5 / Eloquent - 对属于多的关系进行查询过滤

如何查询 Laravel Eloquent 的 belongsTo 关系?

如何在 Eloquent 中查询特定关系

如何在 laravel eloquent 中查询多个关系

Laravel Eloquent ORM查询关系里面的关系