Как переделать raw sql в нормальный query builder?

Переделка "raw" SQL-запросов в более гибкий и безопасный формат с использованием Query Builder в Laravel может значительно улучшить структурированность и читаемость вашего кода, а также защитить вас от SQL-инъекций.

Для начала, удобно знать, что Query Builder - это набор методов, предоставляемых Laravel, с помощью которых можно строить SQL-запросы использованием цепочек вызова методов. Query Builder предоставляет удобный и гибкий способ составления запросов без необходимости писать "сырой" SQL-код.

Для переноса "raw" SQL-запроса на Query Builder следуйте следующим шагам:

1. Создайте экземпляр соответствующего модели или использовать глобальную функцию DB, чтобы получить экземпляр Query Builder.

// Пример использования модели
$users = AppUser::query();

// Пример использования глобальной функции DB
$users = DB::table('users');

2. Используйте функцию (select,insert,update,delete), чтобы указать, что именно вы хотите сделать с данными. Затем вызовите методы Query Builder, соответствующие вашим требованиям.

Пример:

// Пример запроса с использованием "raw" SQL-запроса
SELECT * FROM users

// То же самое, переписанное с использованием Query Builder
$users = DB::table('users')->get();

3. Используйте методы Query Builder для добавления условий, сортировки, слияния таблиц, группировки и т.д.

Пример:

// Пример запроса с использованием "raw" SQL-запроса
SELECT * FROM users WHERE age > 18 AND gender = 'male' ORDER BY created_at DESC

// То же самое, переписанное с использованием Query Builder
$users = DB::table('users')
                ->where('age', '>', 18)
                ->where('gender', 'male')
                ->orderBy('created_at', 'desc')
                ->get();

4. Также можно использовать методы Query Builder для выполнения операций связанных с соединениями данных в базе данных, таких как соединение таблиц и выборка связанных данных.

Пример:

// Пример "raw" SQL-запроса с использованием соединения таблиц
SELECT users.*, countries.name AS country_name FROM users LEFT JOIN countries ON users.country_id = countries.id

// То же самое, переписанное с использованием Query Builder
$users = DB::table('users')
                ->leftJoin('countries', 'users.country_id', '=', 'countries.id')
                ->select('users.*', 'countries.name as country_name')
                ->get();

Это лишь базовые примеры использования Query Builder. Он предоставляет гораздо больше возможностей, таких как сгруппированные запросы, агрегационные функции, ограничение и постраничную навигацию результатов запроса.

Помните, что Query Builder также безопасен от SQL-инъекций, так что вам не нужно беспокоиться о том, чтобы очищать или экранировать данные перед использованием их в запросах.

Надеюсь, этот ответ поможет вам начать использовать Query Builder в Laravel для переделки "raw" SQL-запросов в более удобный и безопасный формат.