Laravel:如果搜索请求可用,则使用相同的表搜索

时间:2018-06-08 08:41:38

标签: laravel laravel-5.5

我有一个简单的查询来发帖,它返回所有帖子。我已经在同一个查询上实现了搜索。

我获取所有数据的查询:

  $userPostDetails    = Post::with(['product','postattribute.attribute.category','user.userDetails'])
                                ->offset($offset)
                                ->limit($limit)
                                ->whereStatus("Active")
                                ->whereIn('product_id', $userApprovalProductIDs)
                                ->whereIn('status', $demand_or_supply) 
                                ->orderBy('id','desc');

                            if($title) {
                                $userPostDetails->whereHas('product', function ($query) use ($title) {
                                    $query->where('title','=', $title);
                                });
                            }
$userPostDetails->get();

它搜索完整数据在product表上适用的条件。但是,如果我想在posts表的同一个表中进行搜索,我可以像$title那样单独执行此操作,因此每当我在$search中执行此数据时,此单独查询都会执行。 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您可以使用{ "rules": { //"messages": { // only authenticated users can read and write the messages node ".read": "auth != null", ".write": "auth != null", //} } } 运算符,文档here,当函数检查变量是否为空或为空时,如果存在,它将执行回调并添加查询条件:

when

编辑:

或者你可以使用这样的默认值:

->when($demand_or_supply, function($query) use ($demand_or_supply) { 
    $query->whereIn('status', $demand_or_suppl);
})
->orderBy('id','desc')
->when($title, function ($query) use ($title) {
    $query->whereHas('product', function ($query) use ($title) {
        $query->where('title','=', $title);
    });
})
->get();