我在我的位置模型中有这种关系:
public function special_users() {
return $this->users()
->where('type_id', '=', '2')
->orWhere('type_id', '=', 'null');
}
但我想要的是其中type_id = 2的用户和其中type_id = null的用户,只有当该位置没有用户且type_id = 2时才会使用。
这可能吗?
答案 0 :(得分:0)
你的问题是关于DBMS的;不是关于Laravel。
通常这些类型的查询是通过查询type_id = 2来执行的。如果没有找到记录,只需触发第二个查询,其中你获取type_id = 0.
答案 1 :(得分:0)
我设计了一个解决方案。所以对于有类似问题的人来说,就是这样。我相信它的执行成本可能会降低,并希望能够如此表现出来,但现在,享受吧。
class Location extends Eloquent {
protected $table = 'locations';
public function users() {
return $this->belongsToMany('User')->withTimestamps()->withPivot(['type_id']);
}
public function chef_users() {
return $this->users()->where('type_id', '2');
}
}
class DishController extends BaseController {
$chef_locations = Location::with('chef_users')->get();
foreach ($chef_locations as $cl) {
foreach ($cl->chef_users as $cu) {
$chef_user_ids[] = $cu->id;
}
}
$locations = Location::with(
array('users' => function($lu_query) use($chef_user_ids) {
$lu_query->where('type_id', '2');
$lu_query->orWhere(function($nested_query) use($chef_user_ids) {
$nested_query->whereNull('type_id');
$nested_query->whereNotIn('user_id', $chef_user_ids);
});
})
)
}