Laravel Eloquent без учета регистра - PullRequest
0 голосов
/ 26 мая 2018

Я хочу собрать все идентификаторы тегов, имена которых находятся в массиве.Для этого я использую whereIn примерно так:

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

Я отлично работаю, но у меня нет опции (которая мне известна), которая делает оператор whereIn нечувствительным к регистру.

$tag_names - это массив имен тегов, имеющих произвольный регистр.

'name' - это столбец, который содержит имя тега в базе данных и имеет определенный регистр, который может не совпадатьодна в $tag_names.

Моя схема postgresql для таблицы Category:

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

1 Ответ

0 голосов
/ 26 мая 2018

Массив в поиске делает его немного сложнее.Если вы хотите, чтобы результат не учитывал регистр, вы можете просто принудить их оба к одному случаю:

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