Как искать нечувствительный запрос в базе данных Postgresql с помощью построителя запросов Laravel? - PullRequest
0 голосов
/ 06 января 2020

Я хочу создать фильтр. Но я сталкиваюсь с чувствительной к регистру проблемой. Я пытался с моим кодом ниже. Но это не сработало. Я получил ошибку 'call undfiend lcase'.

 $type = strtolower($type);
 $name = strtolower($name);
 $users  = DB::table('daftar.bank_list AS uc')
     ->leftJoin('users.users as u','u.bank_id','=','uc.id')
     ->when($type, function ($query, $type) {
         return $query->where('LCASE'('uc.type'), $type);
     })
     ->when($name, function ($query, $name) {
         return $query->where('LCASE'('uc.name'), $name);
     })
     ->get();

Моя база данных Postgresql.

Ответы [ 2 ]

1 голос
/ 06 января 2020

Попробуйте:

$type = strtolower($type);
$name = strtolower($name);
$users  = DB::table('daftar.bank_list AS uc')
    ->leftJoin('users.users as u','u.bank_id','=','uc.id')
    ->when($type, function ($query, $type) {
        return $query->where('uc.type','ILIKE', '%'.$type.'%');
    })
    ->when($name, function ($query, $name) {
        return $query->where('uc.name','ILIKE', '%'.$name.'%');
    })
    ->get(); 

Вы можете искать по ILIKE запросу.

1 голос
/ 06 января 2020

Postgres использует функцию LOWER(), а не LCASE. Кроме того, если вы хотите вызвать собственную функцию Postgres, вам следует использовать whereRaw:

$users = DB::table('daftar.bank_list AS uc')
    ->leftJoin('users.users as u', 'u.bank_id', '=', 'uc.id')
    ->when($type, function ($query, $type) {
        return $query->whereRaw('LOWER(uc.type) = ?', [$type]);
    })
    ->when($name, function ($query, $name) {
        return $query->whereRaw('LOWER(uc.name) = ?', [$name]
    })
    ->get();
...