Методы расширенного поиска в Laravel Eloquent: поиск пользователей по имени

Поиск конкретных пользователей в базе данных — обычная задача в веб-приложениях. В этой статье мы рассмотрим различные методы поиска пользователей по их имени и фамилии с помощью Laravel Eloquent, мощного инструмента ORM (объектно-реляционного сопоставления). Мы предоставим примеры кода для каждого метода, которые помогут вам реализовать эти методы в ваших приложениях Laravel.

Метод 1. Использование оператора LIKE в необработанном запросе

$users = DB::table('users')
    ->whereRaw("CONCAT(first_name, ' ', last_name) LIKE '%' . ? . '%'", [$query])
    ->get();

В этом методе мы используем метод whereRawдля написания необработанного SQL-запроса. Функция CONCATиспользуется для объединения столбцов first_nameи last_name, а затем мы применяем оператор LIKEдля поиска. для частичного соответствия переменной $query.

Метод 2. Использование метода whereс оператором LIKE

$users = User::where(DB::raw("CONCAT(first_name, ' ', last_name)"), 'LIKE', '%' . $query . '%')
    ->get();

Здесь мы используем метод where, предоставленный Laravel Eloquent, для построения запроса. Мы передаем имя столбца в качестве первого аргумента, затем оператор (LIKE), а затем искомое значение. Подстановочные знаки %используются для соответствия любым символам до и после поискового запроса.

Метод 3: использование метода whereс несколькими предложениями orWhere

$users = User::where(function ($query) use ($search) {
        $query->where('first_name', 'LIKE', '%' . $search . '%')
              ->orWhere('last_name', 'LIKE', '%' . $search . '%');
    })
    ->get();

В этом методе мы используем метод whereс замыканием для группировки нескольких предложений orWhere. Это позволяет нам искать запрос в столбце first_nameили last_name.

Метод 4. Использование метода whereRawс привязкой параметров

$users = User::whereRaw("CONCAT(first_name, ' ', last_name) LIKE ?", ['%' . $search . '%'])
    ->get();

Подобно методу 1, мы можем использовать метод whereRawдля написания необработанного запроса. Однако в этом методе мы связываем поисковый запрос как параметр, что помогает предотвратить атаки с использованием SQL-инъекций.

Метод 5. Использование полнотекстового поиска (только MySQL)

$users = User::whereRaw("MATCH(first_name, last_name) AGAINST (? IN BOOLEAN MODE)", [$search])
    ->get();

Если вы используете MySQL в качестве базы данных, вы можете воспользоваться возможностями полнотекстового поиска. Этот метод использует операторы MATCHи AGAINSTдля выполнения полнотекстового поиска по столбцам first_nameи last_name.

В этой статье мы рассмотрели несколько методов поиска пользователей по имени и фамилии с помощью Laravel Eloquent. Независимо от того, предпочитаете ли вы необработанные запросы или выразительный синтаксис Laravel Eloquent, у вас есть множество вариантов реализации функции поиска пользователей в ваших приложениях Laravel. Используя эти методы, вы можете улучшить взаимодействие с пользователем и повысить эффективность запросов к базе данных.