Yii2 Active Record. Частина 2

20

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком 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(‘idall();

В результаті ми отримаємо наступний запит:

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

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

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