Yii2 Active Record. Часть 2

Yii2 Active Record

От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой и следующих статьях мы немного больше внимания уделим классу Yii2 Active Record, который предлагает объектный интерфейс для данных БД. Мы познакомимся с наиболее популярным набором методов класса, как то: where, update, save, count, delete и т.п.

Итак, мы продолжаем знакомиться с классом ActiveRecord и различными возможностями получения данных. В предыдущей статье мы добавили настройку запроса, использовав метод where. Передавая различные параметры в данный метод, вы можете получить нужные вам данные по условию. Фактически данный метод является аналогом оператора WHERE в языке SQL.

Однако, не смотря на добавленное условие, мы все равно можем получать излишек данных, поскольку Yii генерирует запрос вида SELECT *, а это не всегда хорошо. Например, у нас может быть большая таблица с десятками полей. Из всей этой таблицы нам всего-то нужно получить несколько нужных полей. Фреймворк же по умолчанию запросит все поля. Как указать, что мы хотим получить вполне конкретный набор полей?

Думаю, вы уже догадались — нам поможет метод select, который может принимать как строковый параметр, так и массив. В обоих случаях достаточно через запятую перечислить имена полей, который необходимы. Например, выберем поля id и name:

$cats = Category::find()->select('id, name')->where(['like', 'name', 's'])->all();
$cats = Category::find()->select(['id', 'name'])->where(['like', 'name', 's'])->all();

Оба варианта записи вернут один и тот же результат, а фреймворк в этот раз будет генерировать запрос вида:

SELECT `id`, `name` FROM `category` WHERE `name` LIKE '%s%'

Хорошо, теперь давайте еще немного поэкспериментируем с условиями. На практике нам часто необходимо добавить в запрос несколько различных условий. При этом в различных ситуациях мы хотим чтобы выполнялось каждое из условий или хотя бы одно из перечисленных условий. В SQL это будут запросы вида:

SELECT * FROM table WHERE condition1 AND condition2...;
SELECT * FROM table WHERE condition1 OR condition2...;

Как реализовать такие запросы в Yii? Для этого можно использовать методы andWhere и orWhere. Давайте попробуем:

$cats = Category::find()->select(['id', 'name'])->where(['like', 'name', 's'])->andWhere('id<4')->all();

В результате мы получим следующий запрос:

SELECT `id`, `name` FROM `category` WHERE (`name` LIKE '%s%') AND (id<4)

Аналогичным образом вы можете использовать метод orWhere, в этом случает будет добавлено альтернативное условие с помощью оператора OR. В следующей статье мы продолжим знакомство с методами конструктора запросов.

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

Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Фреймворк YII2. Быстрая разработка с современным фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Научиться

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree