Rudra Framework
Рекомендуется использовать строитель запросов (QueryBuilder) в репозиториях — это повышает читаемость и безопасность SQL-запросов за счёт параметризации и абстракции.
Для работы со строителем запросов необходимо обратиться к фасаду:
use Rudra\Model\QBFacade;$qString = QBFacade::select()
->from(self::$table)
->get();Результат SQL:
SELECT * FROM test;Выполнение запроса:
$result = Test::qBuilder($qString);$qString = QBFacade::select('id, title')
->from(self::$table)
->get();Результат SQL:
SELECT id, title FROM test;$qString = QBFacade::select('id, title')
->from(self::$table)
->where(':id')
->and(':created_at')
->get();Результат SQL:
SELECT id, title FROM test WHERE :id AND :created_at;⚠️ Важно: фасад строит сырую строку запроса. Подстановка значений параметров (:id, :created_at) осуществляется при выполнении через Test::qBuilder():
$result = Test::qBuilder($qString, [
':id' => 1,
':created_at' => '2022-02-23 14:36:06'
]);Это обеспечивает защиту от SQL-инъекций.
Поддерживаемые условия и конструкции:
Логические связки:
->where(':id')
->or(':created_at')Сложные условия в одном where():
->where(':id AND :created_at')
->where(':id OR :created_at')Специальные SQL-выражения:
->where('id BETWEEN :id AND :id2')
->where('title LIKE :search')Пагинация:
->limit('10')->offset('20')Сортировка и группировка:
->orderBy('created_at DESC')
->groupBy('category_id')По умолчанию используется LEFT JOIN:
->join("users")->on("items.user_id = users.id")Тип объединения можно изменить:
->join("users", "INNER")->on("items.user_id = users.id")
->join("users", "RIGHT")->on("items.user_id = users.id")
->join("users", "CROSS")->on("1=1") // осторожно с CROSS JOIN!Каждый запрос обязательно должен завершаться методом ->get(), который: