【问题标题】:How can I build a condition based query in Laravel using eloquent如何使用 eloquent 在 Laravel 中构建基于条件的查询
【发布时间】:2016-01-12 23:12:12
【问题描述】:

我想知道如何在 Laravel 中使用 eloquent 构建基于条件的查询?

我已经找到了如何使用 raw query 来做到这一点,但这不是我想要的,answer to this question 也不是那么动态,至少不像我想要的那样动态。

我试图实现的是根据某些条件创建一个动态的 WHERE 查询,例如该字段是否填充。

如果我使用下面的代码,

        $matchThese = [
            'role' => 'user',
            'place' => \Input::get('location')
        ];

        $availableUsers = User::where($matchThese)->take($count)->orderByRaw("RAND()")->get();

如果我不将位置作为 POST 值发送,查询将失败。我不希望它失败我希望它跳到查询中的下一个 WHERE 子句。所以基本上如果没有给定的地方不要搜索它。

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    根据您的输入中是否包含该位置,构建查询并包含 ->where() 子句:

    $query = User::where('role', 'user');
    
    $query = \Input::has('location') ? $query->where('location', \Input::get('location')) : $query;
    
    $availableUsers = $query->take($count)->orderByRaw('RAND()')->get();
    

    【讨论】:

      【解决方案2】:

      只需使用 if 条件构建数组:

      $matchThese = [
          'role' => 'user',
      ];
      if(\Input::has('location')){
          $matchThese['place'] = \Input::get('location');
      }
      $availableUsers = User::where($matchThese)->take($count)->orderByRaw("RAND()")->get();
      

      【讨论】:

      • 谢谢!它奏效了我也从 Laravel 松弛中得到了相同的答案,唯一的区别是用户提供了一个速记 if 语句。
      【解决方案3】:
         $query = DB::table('table_name');
      
         if($something == "something"){
            $query->where('something', 'something');
         }
      
         $some_variable= $query->where('published', 1)->get();    
      

      你可以使用这样的东西。

      【讨论】:

        猜你喜欢
        • 2012-12-20
        • 2018-04-16
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        • 2018-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多