如何使用雄辩的

时间:2016-01-12 12:51:39

标签: php mysql laravel eloquent

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

我已经找到了如何使用raw query,但这不是我想要的answer to this question并不是那么动态,至少不像我想要的那样动态。< / p>

我尝试实现的是基于某些条件创建动态WHERE查询,例如,如果字段已填充或不填充。

如果我使用以下代码,

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

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

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

3 个答案:

答案 0 :(得分:1)

使用if条件构建数组:

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

答案 1 :(得分: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 :(得分:0)

   $query = DB::table('table_name');

   if($something == "something"){
      $query->where('something', 'something');
   }

   $some_variable= $query->where('published', 1)->get();    

你可以使用这样的东西。