Laravel 如何从嵌套查询添加联接列

Laravel 如何从嵌套查询添加联接列,laravel,eloquent,Laravel,Eloquent,我尝试使用whereHas语句从嵌套查询添加联接列,如下所示: $options=Option::whereHas('text',function($query){ $query->addSelect('options_text.text'); })->其中(['active'=>1,]) ->第一个(); 但结果是$options->text给出了null。有没有办法做到这一点?不使用->join()进行所有查询 我的模特很好,这是我的亲戚: 公共功能文本() { 返回$this->hasM

我尝试使用
whereHas
语句从嵌套查询添加联接列,如下所示:

$options=Option::whereHas('text',function($query){
$query->addSelect('options_text.text');
})->其中(['active'=>1,])
->第一个();
但结果是
$options->text
给出了
null
。有没有办法做到这一点?不使用
->join()
进行所有查询

我的模特很好,这是我的亲戚:

公共功能文本()
{
返回$this->hasMany('App\OptionText','option\u id','id');
}

我在不同的情况下使用它,它是正确的。

您要查找的是带有([$relation=>$callback])符号的
。您可以在此处指定只应加载一列:

$options = Option::query()
    ->with(['texts' => function ($query) {
        $query->select(['id', 'text']);
    }])
    ->where('active', 1)
    ->first();
不要忘了选择
id
列(或键列,如果不是
id
),否则,Eloquent不知道哪个相关对象属于哪个父对象

如果还需要相关表上的约束,只需将其添加到查询中即可:

$options = Option::query()
    ->with(['texts' => function ($query) {
        $query->select(['id', 'text']);
    }])
    ->whereHas('texts', function ($query) {
        $query->where('text', 'LIKE', '%dog%');
    })
    ->where('active', 1)
    ->first();

我认为这是关系查询,对吗?请添加您的两个型号。