当我使用 Laravel Collection 搜索功能时,它总是返回 false。
代码:
$entries = Entry::all();
$results = $entries->search('Jack', true);
dd($results);
输出:
false
输出 dd($entries) :
Collection {#218 ▼
#items: array:9 [▼
0 => Entry {#219 ▼
#fillable: array:2 [▶]
#connection: "mysql"
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:5 [▶]
#original: array:5 [▶]
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
1 => Entry {#220 ▶}
2 => Entry {#221 ▶}
3 => Entry {#222 ▶}
4 => Entry {#223 ▶}
5 => Entry {#224 ▶}
6 => Entry {#225 ▶}
7 => Entry {#226 ▶}
8 => Entry {#227 ▶}
]
}
抱歉格式太糟糕了。
您需要使用带有
search()
方法的简单集合。因此,如果您想搜索名称,请执行以下操作:
$entries = Entry::pluck('name');
$results = $entries->search('Jack');
顺便说一句,这是一种非常糟糕的搜索方式,因为它会首先将所有条目加载到内存中,然后再进行搜索。
更好的方法是使用 Eloquent 或查询生成器:
$results = Entry::where('name', 'like', '%'.$name.'%')->get();
或者简单地说:
$results = Entry::where('name', $name)->get();
当您想要搜索全名时。
您可以随时使用 Laravel Collections 的
filter()
功能:
$matchingRecords = $allRecords->filter(function($key, $record){
return $record->name == "Jack";
});
替代方案是
first()
函数,将结果限制为第一个找到的结果,或 search()
。
查看 https://laravel.com/docs/5.4/collections#available-methods 了解更多信息。
您持有的收藏有没有价值
Jack
?而不是 f.e. ‘杰克’?
根据文档 https://laravel.com/docs/5.4/scout#searching
Entry::search('Jack')->get();
应该可以解决问题,安装驱动程序。
我添加了 Eloquence[0] 包。
如果适用,请尝试:
$collection->hasAny($needle)
就我而言已经解决了。