在嵌套关系期间仅选择某些列

Selecting only certain columns during nested relation

如果我有一个查询:MyModal::with('relation1.relation2')->get(),我如何限制从relation1中选择的字段?

MyModal::with('relation1:column1,column2')->with('relation1.relation2')->get() 选择 relation1 上的所有字段。

MyModal::with('relation1:column1,column2.relation2')->get() 给出一个 SQL 错误,因为它试图找到一个名为 column2.relation2.

的列

我不确定还有什么其他方法,这是否可能,或者获取嵌套关系是否总是获取第一个关系上的所有字段?

你应该在关系 select 之后做第 select 列: MyModal::with(['relation1.relation2', 'relation1:column1,column2'])->get()

或者您可以在模型本身中定义它

public function relation1()
{
    return $this->hasOne(Relation1::class)->select(['column1', 'column2']);
}
Model::query()
->with(array('relation1' => function($query) {
    $query->select('column1', 'column2');
},'relation2' => function($query) {
    $query->select('column1', 'column2');
}))
->get();