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

В Yii2 существует удобный инструмент для работы с запросами к базе данных, называемый ActiveQuery. Он позволяет строить запросы с помощью объектно-ориентированного подхода. В этом ответе я покажу вам, как правильно составить запрос ActiveQuery.

Прежде всего, вам необходимо создать экземпляр ActiveQuery для конкретной модели. Допустим, у вас есть модель "User", и вы хотите получить всех пользователей, у которых возраст больше 18 лет. Вот как будет выглядеть создание запроса для этой задачи:

$query = User::find()->where(['>', 'age', 18]);

В этом примере мы используем статический метод find() модели User, чтобы создать экземпляр ActiveQuery, а затем вызываем метод where(), чтобы указать условие фильтрации. В данном случае мы используем оператор "больше" (>) и проверяем, что поле "age" больше 18.

Далее, если вам нужны только определенные поля из модели User, вы можете использовать метод select(). Например, если вы хотите получить только имена пользователей, то запрос будет выглядеть так:

$query = User::find()->select('name')->where(['>', 'age', 18]);

Если вам необходимо выполнить сортировку результатов запроса, вы можете использовать метод orderBy(). Например, давайте отсортируем пользователей по убыванию возраста:

$query = User::find()->orderBy(['age' => SORT_DESC])->where(['>', 'age', 18]);

Здесь мы используем массив ['age' => SORT_DESC] в качестве аргумента для метода orderBy(). Ключ age указывает на поле, по которому будет прошла сортировка, а значение SORT_DESC указывает на сортировку по убыванию.

Если вам нужно установить ограничение на количество записей в результате запроса, вы можете использовать метод limit(). Например, если вы хотите получить только первых 10 пользователей, то запрос будет выглядеть так:

$query = User::find()->orderBy(['age' => SORT_DESC])->where(['>', 'age', 18])->limit(10);

Наконец, чтобы выполнить запрос и получить результат, вы можете использовать метод all(). Например:

$users = $query->all();

В этом примере мы вызываем метод all() на экземпляре ActiveQuery $query, который выполняет запрос и возвращает массив моделей User.

Таким образом, вы можете использовать методы where(), select(), orderBy(), limit() и all(), чтобы создать и выполнить запросы в Yii2 с помощью ActiveQuery. Это лишь небольшое введение в данную тему, и в Yii2 имеется множество других возможностей для создания запросов ActiveQuery, включая объединение таблиц, использование условий "IN" и "OR" и другие функции.