使用或多个位置中的多个查询生成器拉拉维尔

我想从具有4个条件的数据库垫中进行选择,其中1个条件必须使用“or”。我写了这个查询生成器,它的工作原理。但我想知道我是否可以使用较短的查询。例如,在“where”括号中使用3个条件,在“或Where”括号中使用1个条件。这是我的查询:


$pads = DB::table('pads')

    ->join('languages', 'pads.language_id', '=', 'languages.id')

    ->select('pads.id', 'pads.title', 'pads.status', 'pads.people', 'pads.created_at', 'languages.name as language')

    ->where([

        ['pads.user_id', Auth::user()->id],

        ['pads.title', 'LIKE', "%{$request->search}%"],

        ['pads.status', $request->status],

        ['pads.language_id', $request->lg_id]

    ])

    ->orWhere([

        ['pads.user_id', Auth::user()->id],

        ['pads.people', 'LIKE', "%{$request->search}%"],

        ['pads.status', $request->status],

        ['pads.language_id', $request->lg_id]

    ])

    ->orderBy('created_at', 'desc')

    ->get();


DIEA
浏览 72回答 1
1回答

侃侃尔雅

您必须在 内部中对条件进行分组,并以函数作为参数。ORorWhere()->where([        ['pads.user_id', Auth::user()->id],        ['pads.status', $request->status],        ['pads.language_id', $request->lg_id]    ])->where(function ($query) use ($request) {    $query->where('pads.title', 'LIKE', "%{$request->search}%")          ->orWhere('pads.people', 'LIKE', "%{$request->search}%");})这将生成类似于WHERE pads.user_id = ?  AND pads.status = ?   AND pads.language_id = ?  AND (       pads.title LIKE ?       OR pads.people LIKE ?   )
打开App,查看更多内容
随时随地看视频慕课网APP