【问题标题】:check if else in eloquent laravel检查是否在雄辩的 laravel 中
【发布时间】:2021-06-25 09:44:59
【问题描述】:

我有一段代码:

$filter = PriceSubscription::select('id', 'name', 'age', 'address')
          ->where('id', 'like', '%' . $id . '%')
          ->where('name', $name)
          ->where('age', 'like', '%' . $age . '%')
          ->orderBy('createdAt', 'desc')
          ->get()->toArray();

我想在where 中查看if/else。 示例:

if (!empty($id)) {
   ->where('id', 'like', '%' . $id . '%');
}

请给我一些想法。

【问题讨论】:

  • 你能详细说明你想用if else检查什么

标签: php laravel eloquent laravel-8


【解决方案1】:

您可以使用when

$filter = PriceSubscription::select('id', 'name', 'age', 'address')
        ->when(!empty($id),function ($query)use($id){
            $query->where('id', 'like', '%' . $id . '%');
        })
       ->where('name', $name)
        ->where('age', 'like', '%' . $age . '%')
        ->orderBy('createdAt', 'desc')
        ->get()->toArray();

或者你可以使用 where 回调

$filter = PriceSubscription::select('id', 'name', 'age', 'address')
            ->where(function ($query)use($id){
                if(!empty($id)){
                    $query->where('id', 'like', '%' . $id . '%');
                }
                
            })
            ->where('name', $name)
            ->where('age', 'like', '%' . $age . '%')
            ->orderBy('createdAt', 'desc')
            ->get()->toArray();

【讨论】:

  • 谢谢兄弟..你在我的工作上帮助了我很多!
【解决方案2】:

你可以打破你的方法链:

$filter = PriceSubscription::select('id', 'name', 'age', 'address');
if (!empty($id)) {
   $filter->where('id', 'like', '%' . $id . '%');
}
          $filter->where('name', $name)
          ->where('age', 'like', '%' . $age . '%')
          ->orderBy('createdAt', 'desc')
          ->get()->toArray();

【讨论】:

    【解决方案3】:

    如果使用 laravel 版本 >= 5.2 可以简单写代码:

    $conditions = [  
       ['name',  '=', $name], 
       ['age',  'like', "%$age%"]
     ];
    if (!empty($id)) {
       array_push($conditions, ['id', 'like', "%$id%"]);
    }
    PriceSubscription::select('id', 'name', 'age', 'address')
    ->where($conditions)
    ->orderBy('createdAt', 'desc')
    ->get()->toArray();
    

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 2018-01-26
      • 2021-07-23
      • 2022-11-25
      • 2017-11-11
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多