如何使用laravel查询构建器嵌套WHERE + AND条件?

时间:2017-12-12 02:19:37

标签: php laravel laravel-query-builder

我需要这样的东西:

public function myFunc(Request $request) {
    $search = $request->input('searchString');
    $myOjb = myModel::where('field1', 'like', '%' .$search . '%')
                    ->orwhere('field2', 'like', '%' .$search . '%')
                    ->orwhere('field3', 'like', '%' .$search . '%')
                    ->orwhere('field4', 'like', '%' .$search . '%')
                    ->where('field5','yes')

}

我需要提供任何like为真的数据,而字段field5 = yes必须是。

问题是:即使找不到field5,它也会为我提供数据 如何正确过滤?

不够了解:Advanced Wheres

2 个答案:

答案 0 :(得分:1)

您可以通过在where()

上传递闭包来执行以下操作
myModel::where('field5', 'YES')->where(function ($q) use($search) {
                                                     ^^^
    return $q->where('field1', 'like', '%' .$search . '%')
              ->orwhere('field2', 'like', '%' .$search . '%')
              ->orwhere('field3', 'like', '%' .$search . '%')
              ->orwhere('field4', 'like', '%' .$search . '%');
});

EDIT 您需要使用use

将变量传递给闭包

答案 1 :(得分:1)

试试这个,

$myOjb = myModel::where('field1', 'like', '%' .$search . '%')
                ->where('field5','yes')
                ->where(function ($query) {
                $query->where('field2', 'like', '%' .$search . '%')
                      ->orWhere('field3', 'like', '%' .$search . '%')
                      ->orWhere('field4', 'like', '%' .$search . '%');
                });