Laravel:或者搜索查询

时间:2018-06-13 06:37:43

标签: laravel laravel-5.5

我的模型中有一个简单的查询来获取数据。现在我想使用companyname进行搜索。我的查询代码:

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

现在,我在6 rows中获得6 rows我希望使用逗号分隔companynameabcCompany,indCompany过滤数据。

array:2 [
  0 => "abccompany"
  1 => "indcompany"
]

我尝试了什么:

  if($companyname !="") {
        $companyDetail    = Explode(',',$companyname);
        $searchablePost->whereHas('user.userDetails', function ($query) use ($companyDetail) {
                $i=1;
                foreach ($companyDetail as $search_with_compayname) {
                        if(count($companyDetail)>0 && $i==1) {
                            $query->where('company','LIKE',"%{$search_with_compayname}%");
                        } else {
                            $query->orWhere('company','LIKE',"%{$search_with_compayname}%");
                        }
                $i++;
                }
        });
    }

它是好的还是有其他方法可以进行良好的搜索?

1 个答案:

答案 0 :(得分:0)

如果要搜索公司名称的CSV列表,MySQL会提供一个函数whereRaw。我想你可以在当前的Laravel查询中添加 $searchablePost = Post::with(['product','postattribute.attribute.category','user.userDetails']) ->whereIn('status', $is_or_active) ->whereIn('product_id', $userApprovalProductIDs) ->whereIn('demand_or_supply', $is_demand_supply) ->whereRaw('FIND_IN_SET(company, ?) > 0', [$search_with_compayname]) ->offset($offset) ->limit($limit) ->orderBy('id', 'desc'); 子句:

EXISTS

虽然上述方法可行,但最好的长期方法是避免数据库中的CSV和其他非标准化数据。理想情况下,您将拥有一个包含公司名称列表的表,每个记录上都有一个名称。然后,您可以加入或使用{{1}}查询来回答您的问题。