1

在 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%");

我没有得到任何结果。

4

4 回答 4

1

我自己发现了问题:D

laravel中的collect()->where()方法支持三个参数(key、operator、value),但 operator 不能是“LIKE”。

此运算符仅支持 >,=,< 符号。

于 2018-06-07T10:20:58.803 回答
0

where方法按给定对过滤集合key / value,因此如果您希望查询正常工作,您应该将其更改为类似这样的内容

$titleSearchResult=collect($ads)->where('title', 'ssss');

注意:我不确定%它们是否会像在 LIKE 语句中那样工作,所以让我知道它是否有效:D Laravel 官方文档解释 where 方法。

于 2018-06-07T09:53:50.623 回答
0

你可以在新版本的 laravel 中使用 like。这将直接为您提供过滤结果。

$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

于 2018-06-08T12:20:45.283 回答
0

要执行类似的查询,您可以过滤集合。

$filtered = $ads->filter(function($value,$key){
   if(strpos($value['title'],'ss') !== false){
      return $value;
   }
});

https://laravel.com/docs/5.6/collections#method-filter

于 2019-02-01T13:29:56.320 回答