Laravel Eager Loading:从多态关系中只选择几列

时间:2017-01-09 14:08:40

标签: laravel laravel-4 eloquent

如何从多态关系中仅加载特定列?

我有一个people表格,可以变换为用户和机器人,我只需要为特定查询加载first_namelast_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');
}

1 个答案:

答案 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');
        }]);
    })];
}]);