在laravel 5.6中我有$ads
$ads=Ad::whereIn('type',$type)->orderBy('id','desc')->get();
,其值如下所示:
[
{
"id": 50,
"title": "sssss",
"description": "Et enim provident. Eos animi illum ullam eaque aut.",
"created_at": "2018-06-06 18:12:43",
"updated_at": "2018-06-06 18:12:43"
},...
]
我想在这个数组中搜索;
我写的时候:
$titleSearchResult=collect($ads)->where('title','LIKE',"ssss");
我得到的结果是真的;
但是当我写道:
$titleSearchResult=collect($ads)->where('title','LIKE',"%ss%");
我没有得到任何结果。
答案 0 :(得分:0)
where
方法按给定的key / value
对过滤集合,因此如果您希望查询有效,则应将其更改为此类
$titleSearchResult=collect($ads)->where('title', 'ssss');
注意: 我不确定%
是否会像在LIKE声明中那样工作,所以请告诉我它有效:D
Laravel Official docs explaining where method.
答案 1 :(得分:0)
我自己发现了问题:D
laravel中的collect()->where()
方法支持三个参数(键,运算符,值),但运算符不能“LIKE”。
此运算符仅支持>,=,<符号。
答案 2 :(得分:0)
您可以将此类似用于laravel的新版本。这将直接为您提供过滤结果。
$users = DB::table('users')
->where('name', 'like', 'T%')
->get();
或在您的情况下如下:
$users = DB::table('users')
->where('name', 'like', '%' . $like . '%')
->get();
请查看以下文档,了解有关where子句的更多详细信息: https://laravel.com/docs/5.6/queries#where-clauses
答案 3 :(得分:0)
要执行类似的查询,您可以过滤集合。
$filtered = $ads->filter(function($value,$key){
if(strpos($value['title'],'ss') !== false){
return $value;
}
});