有时候我们在Laravel
中使用where时会出现这样的场景,像这样:
if (!empty($request->input('user_name'))) {
$where[] = ['user_name', 'like', "%" . $request->input('user_name') . "%"];
}
if (!empty($request->input('group_id'))) {
$where[] = ['group_id', $request->input('group_id') ];
}
if (!empty($request->input('email'))) {
$where[] = ['email', 'like', "%" . $request->input('email') . "%"];
}
if (!empty($request->input('mobile'))) {
$where[] = ['mobile', 'like', "%" . $request->input('mobile') . "%"];
}
$users = User::where($where)->get();
但它太丑了,但我只想使用这个 User::search($request->only(['user_name', 'email', 'mobile']));
,也许我们必须为输入名称的键名称设计一些规则,您对这种情况有什么好主意吗?谢谢。
最佳答案
您可以创建 local scope :
public function scopeSearch($q, $inputs)
{
$where = [];
foreach ($inputs as $key => $data) {
$where[] = [$key, 'like', "%".$data."%"];
}
return $q->where($where);
}
然后使用它:
User::search($request->only(['user_name', 'email', 'mobile']))->get();
关于php - 如何简化 Laravel 中的多重搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40603224/