我正在处理此查询
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
这个想法是通才
可以看到事件,但它们可能不在user_id
列中,所以我需要获取通才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);
运行时过滤器可以正常工作。
我真的不明白为什么不起作用,如果您需要更多信息,请告诉我
最佳答案
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;
关于php - Laravel Eloquent 查询时进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50765304/