Как правильно построить запрос в Yii2?

В Yii2 есть несколько способов построения запросов к базе данных. Давайте рассмотрим наиболее популярные из них.

1. С использованием Query Builder:

Query Builder - это объектно-ориентированное API, которое позволяет вам строить запросы к базе данных в виде цепочки методов. Объект Query Builder создается с помощью статического метода Yii::$app->db->createCommand(). Ниже приведен пример создания запроса SELECT с условиями:

$query = Yii::$app->db->createCommand()
    ->select('id, name')
    ->from('user')
    ->where(['status' => 1])
    ->andWhere(['>', 'age', 18])
    ->orderBy('name')
    ->limit(10)
    ->offset(0)
    ->queryAll();

2. С использованием Active Record:

Active Record - это инструмент, который позволяет вам работать с базой данных через объекты. Каждая таблица в базе данных представлена отдельным классом модели. Active Record автоматически создает или обновляет записи в базе данных при изменении соответствующих объектов моделей. Ниже приведен пример создания запроса SELECT с использованием Active Record:

$users = User::find()
    ->select(['id', 'name'])
    ->where(['status' => 1])
    ->andWhere(['>', 'age', 18])
    ->orderBy('name')
    ->limit(10)
    ->offset(0)
    ->all();

3. С использованием SQL-запросов:

Если вам требуется выполнить сложный SQL-запрос, который не может быть построен с помощью Query Builder или Active Record, вы можете воспользоваться методом createCommand() для создания объекта yiidbCommand. Этот класс предоставляет методы для выполнения запроса и получения результатов. Ниже приведен пример создания запроса на SQL:

$command = Yii::$app->db->createCommand('SELECT id, name, age FROM user WHERE status = :status AND age > :age');
$command->bindValue(':status', 1);
$command->bindValue(':age', 18);
$users = $command->queryAll();

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

Независимо от выбранного метода построения запросов, Yii2 обеспечивает удобный и безопасный способ работы с базой данных. Вы можете выбрать наиболее подходящий метод в зависимости от ваших потребностей и стиля программирования.