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();
我认为这是关系查询,对吗?请添加您的两个型号。