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){…})
中,以便将父项添加到条件中。