gpt4 book ai didi

php - Laravel Eloquent 查询时进行过滤

转载 作者:行者123 更新时间:2023-11-29 17:29:22 26 4
gpt4 key购买 nike

我正在处理此查询

select * 
from incidents
where from_id in (SELECT id FROM users WHERE generalist = 579)
or user_id = 579
order
by(created_at)

我的用户模型有 idgeneralist 列。我的事件模型有 iduser_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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com