如何从多态关系中仅加载特定列?
我有一个people
表格,可以变换为用户和机器人,我只需要为特定查询加载first_name
和last_name
。
我试过this solution没有运气,因为它似乎不适用于多态关系...它只是忽略了->select()
并加载了应有的一切。
任何想法?
编辑: 这是相关的查询
$school->load(array(
'associationsTeachers' => function($q){
$q->with(array(
'person' => function($q2){
$q2->with(array(
'account' => function($q3){
$q3->select(array('id', 'first_name', 'last_name', 'person_id', 'account_id', 'account_type' ));
}
));
},
));
}
));
以下是关系
人
table: 'people';
public function account(){
return $this->morphTo();
}
用户
table: 'users'
public function person(){
return $this->morphOne('Person', 'account');
}
博特
table: 'bots'
public function person(){
return $this->morphOne('Person', 'account');
}
答案 0 :(得分:0)
ParentModel::with(['relationship' => function ($q) {
$q->select('relationship_table.only_this', 'relationship_table.this_too', 'relationship_table.foreign_key');
}])->get();
这应该有效。小心包含外键(和变形类型,因为你使用的是多态关系),因为查询需要它来查找相关的模型。
编辑:
我也尝试过这种多态关系(我已在我的一个项目中设置)并且它按预期工作(仅返回选定的列):
public function relationship()
{
return $this->morphedByMany(\FullNS\RelationModel::class, 'pagable')
->select(['relation_table.id', 'relation_table.key]);
}
编辑2:
这样的事情应该有效。但它希望所有选定的列都在accounts
表中(我猜这是不正确的假设)。我不知道你的问题哪些表有哪些列。
$school->load(['associationsTeachers' => function ($q) {
$q->with(['person' => function ($q) {
$q->with(['account' => function ($q) {
$q->select('accounts.id', 'accounts.first_name', 'accounts.last_name', 'accounts.person_id', 'accounts.account_id', 'accounts.account_type');
}]);
})];
}]);