Laravel 口才好。将投影添加到相关模型

Laravel Moloquent. Add projection to related model

我有一个关于关系的查询。

$dbQuery = $this->someModel
    ->where('user_id', '<>', Auth::id())
    ->with(['questions'])
    ->get(['title', 'status', 'expired_at']);

get() 方法中的字段列表为 selected 数据的顶级定义了 selected 字段列表。但我还需要为 questions 关系添加一个投影。我如何才能 select 只有 questions._idquestions.description

我试过将它添加到 get() 列表中,但它不能以这种方式工作。

您可以使用带有 with 的闭包来仅选择某些列:

Model1::with(['model2' => function($query){
    $query->select('column1','column2');
}])->get();

我根据@namelivia 的回答找到了适合我的解决方案。它现在适用于 select,但适用于 project

Model1::with(['model2' => function($query){
    $query->project([
        'column1' => 1,
        'column2' => 1,
        'foreign_key' => 1 /* can not be excluded. */         
    ]);
}])->get();