选择特定列上的急切加载多态关系- Laravel

nnsrf1az  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(93)

在“正常”关系中,我可以这样做,在eager加载时只选择几列(使用with):

->with(['reported' => function ($query) { $query->select(['nick','id']); } ])

字符串
但是,当使用多态关系时,我想要选择的列根据变形的模型而不同,该如何操作呢?
我已经试过像普通的方法一样使用查询,也试过使用morph子句,但是上面没有select函数。
--编辑:

ReportMessages (model)

public function author(){
return $this->morphTo();
}

User (model)

protected $fillable = ['name', (...)];

public function reportMessages(){
return $this->morphOne('App\ReportMessage', 'author');
}

Jogador (model)
protected $fillable=['nick', (...)];

public function reportMessages(){
return $this->morphOne('App\ReportMessage', 'author');
}


当变形的是Jogador模型时,我想只选择(当急切加载时)nick,当变形的是User模型时,只选择名称。

vecaoik1

vecaoik11#

试试这个

$query->with(['reported' => function($query){ $query->select(['id','nick']) } ])->orderBy('created_at', 'ASC');

字符串

umuewwlo

umuewwlo2#

为了选择每个多态关系的特定列,可以使用constraint
有一个类似于变形名称的注解,可以是Post模型或Video,为了恢复每个模型的不同列,我们可以放入以下代码:

$comments = Comment::with(['commentable' => function (MorphTo $morphTo) {
    $morphTo->constrain([
        Post::class => function ($query) {
            $query->select(['hidden_at']);
        },
        Video::class => function ($query) {
            $query->select(['type', 'educational']);
        },
    ]);
}])->get();

字符串

相关问题