我目前正在处理此查询
select *
from incidents
where from_id in (SELECT id FROM users WHERE generalist = 579)
or user_id = 579
order
by(created_at)
我的用户模型有id
和generalist
列。
我的事件的模型有id
,user_id
这是老板ID,from_id
是员工ID
我的想法是generalist
可以看到事件,但它们可能不在user_id
列中,所以我需要让所有通配符匹配的用户
我尝试在Eloquent上制作它并最终得到这个// $ uid是用户的id
$query->whereIn('from_id',User::select('id')->where('generalist',$uid)->get())
->orWhere('user_id',$uid);
我得到了我想要的东西,但是后来我有一个输入,所以我可以过滤信息//通过$ search var
$query->where(function($tq) use ($search){
$tq->whereHas('from',function($query2) use ($search){
$query2->where('firstname', 'like', "%$search%")
->orWhere('lastname', 'like', "%$search%")
->orWhere('number', 'like', "%$search%");
})
->orWhere('status', 'like', "%$search%");
});
这是模型中的“from”函数
public function from() {
return $this->hasOne('App\User','id','from_id');
}
我的问题是过滤没有,但是当$query->where('user_id', $uid);
正在运行时,过滤器工作正常。
我真的不知道为什么不工作,如果你需要更多信息请告诉我
答案 0 :(得分:0)
FWIW,我发现这更容易阅读...
SELECT i.*
FROM incidents i
JOIN users u
ON u.id = i.from_id
WHERE u.generalist = 579
OR i.user_id = 579
ORDER
BY i.created_at;
答案 1 :(得分:0)
很抱歉,如果我没有很好地解释自己,我解决了将其添加到另外一个功能
的情况下 $query->where(function($tq) use ($uid){
$tq->WhereHas('general',function ($query3) use ($uid){
$query3->where('generalist','=',$uid);
})->orWhere('user_id', $uid);
});