От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой и следующих статьях мы немного больше внимания уделим классу Yii2 Active Record, который предлагает объектный интерфейс для данных БД. Мы познакомимся с наиболее популярным набором методов класса, как то: where, update, save, count, delete и т.п.
Итак, мы продолжаем знакомиться с классом ActiveRecord и различными возможностями получения данных. В предыдущей статье мы добавили настройку запроса, использовав метод where. Передавая различные параметры в данный метод, вы можете получить нужные вам данные по условию. Фактически данный метод является аналогом оператора WHERE в языке SQL.
Однако, не смотря на добавленное условие, мы все равно можем получать излишек данных, поскольку Yii генерирует запрос вида SELECT *, а это не всегда хорошо. Например, у нас может быть большая таблица с десятками полей. Из всей этой таблицы нам всего-то нужно получить несколько нужных полей. Фреймворк же по умолчанию запросит все поля. Как указать, что мы хотим получить вполне конкретный набор полей?
Думаю, вы уже догадались — нам поможет метод select, который может принимать как строковый параметр, так и массив. В обоих случаях достаточно через запятую перечислить имена полей, который необходимы. Например, выберем поля id и name:
1 2 |
$cats = Category::find()->select('id, name')->where(['like', 'name', 's'])->all(); $cats = Category::find()->select(['id', 'name'])->where(['like', 'name', 's'])->all(); |
Оба варианта записи вернут один и тот же результат, а фреймворк в этот раз будет генерировать запрос вида:
1 |
SELECT `id`, `name` FROM `category` WHERE `name` LIKE '%s%' |
Хорошо, теперь давайте еще немного поэкспериментируем с условиями. На практике нам часто необходимо добавить в запрос несколько различных условий. При этом в различных ситуациях мы хотим чтобы выполнялось каждое из условий или хотя бы одно из перечисленных условий. В SQL это будут запросы вида:
1 2 |
SELECT * FROM table WHERE condition1 AND condition2...; SELECT * FROM table WHERE condition1 OR condition2...; |
Как реализовать такие запросы в Yii? Для этого можно использовать методы andWhere и orWhere. Давайте попробуем:
1 |
$cats = Category::find()->select(['id', 'name'])->where(['like', 'name', 's'])->andWhere('id<4')->all(); |
В результате мы получим следующий запрос:
1 |
SELECT `id`, `name` FROM `category` WHERE (`name` LIKE '%s%') AND (id<4) |
Аналогичным образом вы можете использовать метод orWhere, в этом случает будет добавлено альтернативное условие с помощью оператора OR. В следующей статье мы продолжим знакомство с методами конструктора запросов.
Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.