我的模型中有一个简单的查询来获取数据。现在我想使用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
我希望使用逗号分隔companyname
来abcCompany,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++;
}
});
}
它是好的还是有其他方法可以进行良好的搜索?
答案 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}}查询来回答您的问题。