Php Laravel雄辩的不区分大小写查询

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

我想收集名称在数组中的所有标记的ID。为此,我使用了
,其中
如下:

$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)'),