猿问

拉拉维尔雄辩模型查询


我想在 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 '%%') 


拉莫斯之舞
浏览 115回答 2
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%"); });

千巷猫影

您必须使用匿名函数,如下代码所示: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();
随时随地看视频慕课网APP
我要回答