Laravel雄辩的模型查询

时间:2020-02-03 20:09:29

标签: php mysql laravel eloquent

如果有人可以帮助,我想在laravel中实现正确的查询

我有此查询

SELECT * FROM `users` WHERE ((`is_verified` = 1) AND (`first_name` like '%%' or `middle_name` like '%%' or `last_name` like '%%' or `email` like '%%'))

我在我的代码中有这个

$user->where([
                ['is_verified', '=', 1]
            ])
                ->where('first_name', 'like', "%$search%")
                ->orWhere('middle_name', 'like', "%$search%")
                ->orWhere('last_name', 'like', "%$search%")
                ->orWhere('email', 'like', "%$search%");

但是会产生

SELECT * FROM `users` WHERE ((`is_verified` = '1') and `first_name` like '%%' or `middle_name` like '%%' or `last_name` like '%%' or `email` like '%%') 

2 个答案:

答案 0 :(得分:2)

您必须在“ closure-where”子句中使用匿名函数。

$user->where([
                ['is_verified', '=', 1]
            ])->where(function ($query) use ($search) {
                $query->where('first_name', 'like', "%$search%")
                ->orWhere('middle_name', 'like', "%$search%")
                ->orWhere('last_name', 'like', "%$search%")
                ->orWhere('email', 'like', "%$search%");
});

答案 1 :(得分:0)

您必须使用匿名函数,例如以下代码:

User::where(function ($query){
        $query->where('is_verified', 1);
    })->where(function ($query) use ($search) {
        $query->where('first_name', 'like', "%$search%")
        ->orWhere('middle_name', 'like', "%$search%")
        ->orWhere('middle_name', 'like', "%$search%")
        ->orWhere('email', 'like', "%$search%");
    })->toSql();