模型A属于模型B。模型B属于模型C
因此,我需要进行一个查询,需要从模型A中获取 *,从模型B中获取2列,从模型C中获取另外2列
ModelA::query()
->with([
'relationModelB' => function ($query) {
$query->select('id', 'column');
},
'relationModelB.relationModelC' => function ($query) {
$query->select('id', 'column');
}
])
->where('id', $id)
->first();
这将返回A中的所有列,B中的2列,但C返回null。
如果我尝试使用这个查询,它将返回来自3个模型的所有列。
ModelA::query()
->with(['relationModelB', 'relationModelB'])
->where('id', $id)
->first();
在第一个查询中缺少了什么,以便从关系的关系中获取特定的列?
2条答案
按热度按时间beq87vna1#
请尝试以下操作
或
hjzp0vay2#
拉维尔8
当您想要选择关系的特定列时,无论是否嵌套,您必须包括关系中涉及的列,因为Eloquent需要它们来解析关系本身(如lagbox在注解中所述)。
在您的情况下,必须包括引用relationModelC的relationModelB的外键列(假设为 relationModelC_id)。可以按以下方式处理此问题:
这适用于只有一个外键列的belongsTo关系。例如,如果关系是morphTo,则还必须包括type列。