繁体   English   中英

Laravel雄辩的查询过滤

[英]Laravel eloquent query when filtering

我目前正在处理此查询

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

这个想法是generalist可以看到事件,但是它们可能不在user_id列中,所以我需要获取通才ID匹配的所有用户。

我尝试在Eloquent上创建它,并最终得到这个// $ 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_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;

抱歉,如果我不能很好地解释自己,我解决了此问题,并在另一个函数之外添加了括号

          $query->where(function($tq) use ($uid){
                $tq->WhereHas('general',function ($query3) use ($uid){
                    $query3->where('generalist','=',$uid);
                })->orWhere('user_id', $uid);
            });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM