php - 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)

我的用户模型有 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/

相关文章:

php:我想要每1分钟执行一次代码

java - 登录在我的 servlet 程序中不起作用

mysql SUM 查询没有给出预期的结果

php - 在 Composer laravel 上安装依赖项(doctrine/dbal)

javascript - 如何在没有 html div(id 或类)的情况下将数据从 Laravel View 传递到 Ajax 或 Javascript 代码 - Laravel 5.3

php - 无法使用 PHP exec 命令和 NirCmd 控制音量

php - PHP 数组可以容纳不同类型的项目吗?

php - 如何在grocerycrud中进行一对多的CRUD?

php - 使用 Laravel Eloquent 进行缓慢的 MySQL 查询

php - 无法在 Laravel 中调用自定义函数