Поиск строки в двух разных столбцах - PullRequest
1 голос
/ 28 января 2020

Я пытался решить эту проблему, моя таблица полных имен разделена на 2, «nombre» для имени и «apellido» для фамилии, дело в том, что иногда они имеют 2 имени и 1 фамилию, например: [name: ANTONIO DAMIAN] [lastname: RAFANIELLO]

Я получаю одну $name для полного поиска, в настоящее время это мой поиск

    $nombre = request('query');
    $socios = Socio::where('nombre', 'like', "%{$nombre}%")
                            ->orWhere('apellido', 'like', "%{$nombre}%")
                            ->orWhere(DB::raw("concat(nombre, ' ', apellido)"), 'like', "%".$nombre."%")
                            ->orWhere('documento', 'like', "%{$nombre}%")
                            ->orderBy('id', 'desc')
                            ->paginate($this->paginateNumber)
                            ->appends(['query'=>$nombre]);

Часть кода, которая должна работать, - ->orWhere(DB::raw("concat(nombre, ' ', apellido)"), 'like', "%".$nombre."%"), но если я ищу antonio rafaniello показать пустой поиск.

Также, если я попробую raw sql SELECT * FROM socio WHERE concat(nombre, ' ', apellido) = '%antonio rafaniello%' либо покажет что-нибудь

Я искал здесь другие awnsers, но никто из них не помог мне, помощь будет очень признательна, спасибо.

1 Ответ

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

Просто попробуйте

$nombre = request('query');
$socios = Socio::where('nombre', 'like', "%{$nombre}%")
                        ->orWhere(DB::raw("concat(nombre, ' ', apellido)"), 'like', "%".strtr($nombre,' ','%')."%")
                        ->orWhere('documento', 'like', "%{$nombre}%")
                        ->orderBy('id', 'desc')
                        ->paginate($this->paginateNumber)
                        ->appends(['query'=>$nombre]);

Но будьте внимательны при полном сканировании ...: (

Отредактировано - Объяснение:

Изменение в strtr($nombre,' ','%'), где он меняет пробелы на%, чтобы sql брал каждое слово отдельно для SELECT

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