如何在数组列表中使用Laravel Eloquent和LIKE语句?

时间:2017-12-20 07:10:48

标签: laravel eloquent laravel-5.3

我在数组中有一些条件,如

    $category = Input::get('category');
    $cuisine = Input::get('cuisine');
    $veg = Input::get('veg');
    $trending = Input::get('trending');
    $time = Input::get('time');

    if($category) $conditions['category'] = $category;
    if($cuisine) $conditions['cuisine'] = $cuisine;
    if($veg) $conditions['veg'] = $veg;
    if($trending) $conditions['trending'] = $trending;

我该如何制作

$list  = Data::where($conditions)->where('cuisine','LIKE','%'.$cuisine.'%')->get();

是否可以在此声明中输入LIKE%

if($cuisine) $conditions['cuisine'] = $cuisine;

问题在于,如果我想将其添加到哪里('烹饪',' LIKE','%'。$ cuisine。' %')需要更新的几个领域。在某些情况下,如果菜肴不存在,一切都无法获取

我想只为烹饪数据执行LIKE语句。

5 个答案:

答案 0 :(得分:3)

当然,您可以通过创建an array with this format

来实现这一目标
[['column1', 'like', '%' . $filter1 . '%'], ['column2', 'like', '%' . $filter2 . '%']]

例如:

$fields = ['category', 'cuisine', 'veg', 'trending', 'time'];

foreach ($fields as $field) {
    if ($request->get($field)) {
        $conditions[] = [$field, 'like', '%' . $request->get($field) . '%'];
    }
}

$list = Data::where($conditions)->get();

文档中的另一个例子:

  

您也可以将一系列条件传递给where函数:

$users = DB::table('users')->where([
    ['status', '=', '1'],
    ['subscribed', '<>', '1'],
])->get();

https://laravel.com/docs/5.5/queries#where-clauses

<强>更新

您刚刚更新了问题,并表示您只想like使用$cuisine。在这种情况下,您可以使用闭包:

->where(function($q) use($request) {
    if ($request->cuisine) {
        $q->where('cuisine', 'like', '%' . $request->cuisine . '%');
    }
})

或者您可以使用when()

->when($request->cuisine, function ($q) use ($cuisine) {
    return $q->where('cuisine', 'like', '%' . $request->cuisine . '%');
})

答案 1 :(得分:0)

嗯,你可以分开来做:

$query = Data::where($conditions);
if($cuisine) {
    $query->where('cuisine','LIKE','%'.$cuisine.'%');
}
$list = $query->get();

答案 2 :(得分:0)

你可以这样做,

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

$category = Input::get('category');
$cuisine = Input::get('cuisine');
$veg = Input::get('veg');
$trending = Input::get('trending');
$time = Input::get('time');

if($category) {
    $query->where('category','LIKE','%'.$category.'%');
}
if($cuisine) {
    $query->where('cuisine','LIKE','%'.$cuisine.'%');
}
if($veg) {
    $query->where('veg','LIKE','%'.$veg.'%');
}
if($trending) {
    $query->where('trending','LIKE','%'.$trending.'%');
}
if($time) {
    $query->where('time','LIKE','%'.$time.'%');
}

$list = $query->get();

我希望你能理解。

答案 3 :(得分:0)

为什么不将默认值分配为空白值,因为它会在LIKE中传递所有情况

$conditions['cuisine']= (isset($cuisine)&&$cuisine)) ? $cuisine : '';

答案 4 :(得分:0)

好吧,你必须为某个变量分配查询:

    $query = Data::where($conditions);
     if($cuisine) { 
    $query = $query->where('cuisine','LIKE','%'.$cuisine.'%'); 
    } 
$list = $query->get();