Laravel Eloquent不区分大小写的查询

时间:2018-05-26 17:32:59

标签: php laravel postgresql eloquent laravel-query-builder

我想收集名称在数组中的所有标签ID。为此,我正在使用whereIn,如此:

$tags = Category::whereIn('name', $tag_names)->pluck('id')->toArray(); 

我工作得很完美,但我没有选择(我知道)使whereIn的操作符不具备案例。

$tag_names是一个标记名称数组,具有任意大小写。

'name'是保存数据库中标记名称的列,其特定大小写可能与$tag_names中的标记不匹配。

Category表的postgresql架构是:

CREATE TABLE categories (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL UNIQUE,
    description TEXT,
    num_posts INTEGER DEFAULT 0 NOT NULL
);

1 个答案:

答案 0 :(得分:0)

搜索中的数组使其变得更加困难。如果您想要一个不区分大小写的结果,您可以将它们强制用于一个案例:

$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();