我有2个用户表,其中包含相应的User
和BUser
雄辩的模型。我正在尝试查询User
并仅根据BUser
上的参数返回结果。
我目前正在这样做:
public function scopeMarketplace($query) {
return $query->with(['buser' => function($q) {
$q->where('marketplace', '=', 1);
}]);
}
哪个会回复所有User
但仅包括BUser
marketplace = 1
但我不想返回任何User
,除非相应的BUser
参数得到满足。 SQL最终成为:
select * from `users` limit 50 offset
select * from `busers` where `busers`.`id` in ('62', '63', '99', '100', '101', '102', '104', '105', '106', '107', '108', '109', '110', '111', '113', '114', '115', '116', '117', '118', '126', '128', '130', '131', '132', '142', '144', '145', '146', '147', '148', '149', '150', '151', '152', '153', '154', '155', '156', '157', '158', '159', '165', '166', '167', '168', '169', '170', '171', '172') and `marketplace` = '1'
这会获取所有User
个对象,然后查询BUser
- 所以返回错误的数据。
User
BUser
中的关系是:
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function buser()
{
return $this->hasOne('App\BUser', 'id', 'id');
}
答案 0 :(得分:2)
您正在寻找whereHas
方法:
public function scopeMarketplace($query) {
$query->whereHas('buser', function ($q) {
$q->where('marketplace', 1);
});
}