我想知道如何使用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子句。所以基本上如果没有给出的地方就不要搜索它。
答案 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();
你可以使用这样的东西。