Php Laravel雄辩的不区分大小写查询
我想收集名称在数组中的所有标记的ID。为此,我使用了Php Laravel雄辩的不区分大小写查询,php,laravel,postgresql,eloquent,laravel-query-builder,Php,Laravel,Postgresql,Eloquent,Laravel Query Builder,我想收集名称在数组中的所有标记的ID。为此,我使用了,其中如下: $tags = Category::whereIn('name', $tag_names)->pluck('id')->toArray(); 我的工作非常完美,但我没有一个选项(据我所知)使的操作符,其中case不敏感 $tag\u names是具有任意大小写的标记名数组 'name'是数据库中保存标记名称的列,其特定大小写可能与$tag\u names中的大小写不匹配 我的类别表的postgresql模式是: C
,其中
如下:
$tags = Category::whereIn('name', $tag_names)->pluck('id')->toArray();
我的工作非常完美,但我没有一个选项(据我所知)使的操作符,其中
case不敏感
$tag\u names
是具有任意大小写的标记名数组
'name'
是数据库中保存标记名称的列,其特定大小写可能与$tag\u names
中的大小写不匹配
我的类别
表的postgresql模式是:
CREATE TABLE categories (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
description TEXT,
num_posts INTEGER DEFAULT 0 NOT NULL
);
搜索中的数组使搜索更加困难。如果您想要一个不区分大小写的结果,您可以将它们强制为一个大小写:
$tags = Category::whereIn( 'LCASE(name)' , strtolower($tag_names) )
或者,如果要在不强制执行案例的情况下进行匹配,可以尝试:
$query = Category::with('tags');
foreach ($tag_names as $tag) {
$query->whereHas('tag', function($q) use ($tag) {
$q->where('name', 'ilike', $tag);
});
}
$query->get();
您可以尝试
其中('LCASE(name)',strtolower($tag_names))
@vivek_23首先,第二个参数应该是数组映射('strtolower',$tag_names)
。其次,第一个参数抛出一个Postgresql错误,即使我用lower
而不是LCASE
尝试它。无论如何,谢谢你的帮助!对不起,我需要一些咖啡。顺便说一句,我在我的机器上检查了这个,它确实工作得很好。我真的很想采用第一种方法,但它不起作用。首先,第二个参数应该是array\u-map('strtolower',$tag\u-names)
。其次,第一个参数抛出一个Postgresql错误,即使我用lower
而不是LCASE
尝试它。无论如何,谢谢你的帮助!必须使用原始表达式:,其中(DB::raw('lower(name)'),