Php 过滤时的Laravel雄辩查询
我目前正在处理这个查询Php 过滤时的Laravel雄辩查询,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我目前正在处理这个查询 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\u id这是老板id,from\u id是员工id 其思想是,generalist可以查看事件,但它们可能不在us
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\u id
这是老板id,from\u id
是员工id
其思想是,generalist
可以查看事件,但它们可能不在user\u id
列中,因此我需要获取其generalist id匹配的所有用户
我试着让它成为雄辩的,最终得到了这个/$uid是用户的id
$query->whereIn('from_id',User::select('id')->where('generalist',$uid)->get())
->orWhere('user_id',$uid);
我得到了我所能看到的,但后来我有了一个输入,这样我就可以过滤$search变量中传递的信息//了
$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\u id',$uid)时代码>正在运行,过滤器工作正常
我真的不明白为什么不工作,如果你需要更多信息,请告诉我,我发现这更容易阅读
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;
对不起,如果我没有很好地解释自己,我解决了这个问题,在外面添加了另一个where函数parentesis
$query->where(function($tq) use ($uid){
$tq->WhereHas('general',function ($query3) use ($uid){
$query3->where('generalist','=',$uid);
})->orWhere('user_id', $uid);
});
请问您为什么在关系中使用$this->hasOne()
,而不是$this->belongsTo()
?仅从上下文来看,如果您在用户
模型上定义了公共函数事件(){$this->hasMany('App\Incident','Incident\id','id');}
,这对我来说是有意义的,因为通常一个用户可以有多个事件。。。但是当使用hasMany()
时,另一端需要belongsTo()
。我真的说不出来,因为我没有做那部分,但为什么在某些情况下会起作用,可能是因为你把->where()
和或where()
以错误的方式混合在一起。@PaulSpiegel你在这里是指$query->where('from_id',User::select')('id')->where('generalist',$uid)->get())->或where('user_id',$uid)
Yes..您可能需要将其包装到->where(function($q){…})
中,以便将父项添加到条件中。