如果变量为null,Laravel eloquent将获取所有内容

问题描述 投票:3回答:1

我有一个模型用户,我希望按城市搜索用户,但如果城市变量为null,则需要所有用户

我的代码是这样的

User::where('city', $city)->orderBy('created_at')->paginate(10);

但如果city变量为null,则查询不返回任何内容

我是你的

 User::doesntHave('city')->get();

还有这个

User::whereHas('city')->get();

我知道我可以像这样阅读我的代码

  if($city){
     User::where('city', $city)->orderBy('created_at')->paginate(10);
  } else {
    User::orderBy('created_at')->paginate(10);
}

但是想在我的查询中添加另一个变量,并不完美

php mysql laravel
1个回答
4
投票

你可以使用where() closure

User::where(function ($q) use($city) {
    if ($city) {
        $q->where('city', $city);
    }
})->orderBy('created_at')->paginate(10);

你可以使用when()

User::when($city, function ($q) use ($city) {
    return $q->where('city', $city);
})->orderBy('created_at')->paginate(10);

3.这样做:

$users = User::orderBy('created_at');

if ($city) {
    $users = $users->where('city', $city);
}

$users = $users->paginate(10);
© www.soinside.com 2019 - 2024. All rights reserved.