Laravel postgres sql Case Insensitive Like

У меня есть запрос Postgres SQL в Laravel:

$_query = Article::join('users', 'articles.user_id', '=', 'users.id')
->select('users.*','articles.*');
if( array_key_exists('title', $parameters) && $parameters['title'] != '' )
$_query->whereRaw( " LOWER(nbl_region_ref.region) like LOWER('%?%')", array( trim($parameters['region']) ) );
$result = $_query->get();

Вывод / ошибка: «PDOException» с сообщением «SQLSTATE [42P18]: неопределенный тип данных: 7 ОШИБКА: не удалось определить тип данных параметра $ 2»

Построитель пробных запросов:

$_query= DB::select("select users.*, articles.* from articles")
->join('users', 'articles.user_id', '=', 'users.id');
if( array_key_exists('title', $parameters) && $parameters['title'] != '' )
$_query->where( "articles.title","ILIKE", array( trim($parameters['title']) ) );
$result = $_query->get();

Вывод: недействительно FROM .. таблица не найдена

Пробовал ILike (по аналогичному вопросу без объединения)

$_query = Article::join('users', 'articles.user_id', '=', 'users.id')
->select('users.*','articles.*');
if( array_key_exists('title', $parameters) && $parameters['title'] != '' )
$_query->where( "articles.title","ILIKE", array( trim($parameters['title']) ) );

Выход: пустой массив

Пытался :

 $_query = Article::join('users', 'articles.user_id', '=', 'users.id')
->select('users.*','articles.*');

$_query->where( function ( $_queryTemp ) use ( $parameters ) {
if( array_key_exists('title', $parameters) && $parameters['title'] != '' )
$_query->whereRaw( " LOWER(nbl_region_ref.region) like LOWER('%?%')", array( trim($parameters['region']) ) );
});

Вывод / ошибка: «PDOException» с сообщением «SQLSTATE [42P18]: неопределенный тип данных: 7 ОШИБКА: не удалось определить тип данных параметра $ 2»

Я должен сделать поисковый запрос без учета регистра на основе входного параметра.

0

Решение

Ваша третья попытка выглядит так, как вы хотите. Исходя из вашей первой и последней попытки, похоже, что вы хотите, чтобы текст поиска был заключен в «%». Поскольку вы не делали этого для третьей попытки, я предполагаю, что именно поэтому ваш запрос не нашел никаких результатов (пустой массив).

Запрос должен быть:

$_query = Article::join('users', 'articles.user_id', '=', 'users.id')
->select('users.*','articles.*');
if (array_key_exists('title', $parameters) && $parameters['title'] != '') {
$_query->where('articles.title', 'ILIKE', '%'.trim($parameters['title']).'%');
}
4

Другие решения

С помощью ILIKE вместо LIKE решил это для меня

0