Как правильно построить запрос на получение данных в Yii2?

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

1. Query Builder:

Yii2 предоставляет удобный и гибкий способ построения запросов с использованием Query Builder. Он позволяет составлять запросы без непосредственной работы с SQL, делая код более удобочитаемым и безопасным.

Пример запроса с использованием Query Builder:

use yiidbQuery;

$query = new Query;
$rows = $query->select('id, name')
    ->from('user')
    ->where(['status' => 1])
    ->orderBy('name')
    ->all();

В данном примере мы создаем объект Query, указываем поля для выборки (select), таблицу, условия (where), сортировку (orderBy) и выполняем запрос (all).

2. Active Record:

Active Record - это шаблон проектирования, который сочетает данные (модель) и поведение (запросы к базе данных) в одном классе. В Yii2 каждая таблица базы данных может быть представлена в виде класса наследующего класс ActiveRecord.

Пример запроса на получение данных с использованием Active Record:

$users = User::find()
    ->where(['status' => 1])
    ->orderBy('name')
    ->all();

В данном примере мы используем статический метод find() класса User (класс представляющий таблицу "user" в базе данных) для получения запроса. Затем мы указываем условие (where), сортировку (orderBy) и выполняем запрос (all).

3. SQL-запросы:

С помощью методов класса Yii::$app->db->createCommand() можно выполнять произвольные SQL-запросы, но такой подход рекомендуется использовать только в исключительных случаях.

Пример использования SQL-запроса:

$connection = Yii::$app->db;
$command = $connection->createCommand('SELECT * FROM user WHERE status=:status');
$command->bindValue(':status', 1);
$users = $command->queryAll();

В данном примере мы создаем объект команды и выполняем SQL-запрос для получения данных из таблицы "user" с использованием параметра ":status" для безопасной передачи значения. Затем мы выполняем запрос с помощью метода queryAll().

Все эти методы предоставляют гибкость и удобство при работе с базой данных в Yii2. Выбор конкретного способа зависит от вашей специфической задачи и личных предпочтений.