У меня есть запрос 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»
Я должен сделать поисковый запрос без учета регистра на основе входного параметра.
Ваша третья попытка выглядит так, как вы хотите. Исходя из вашей первой и последней попытки, похоже, что вы хотите, чтобы текст поиска был заключен в «%». Поскольку вы не делали этого для третьей попытки, я предполагаю, что именно поэтому ваш запрос не нашел никаких результатов (пустой массив).
Запрос должен быть:
$_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']).'%');
}
С помощью ILIKE
вместо LIKE
решил это для меня