Yii2: ActiveRecord. Работа с моделью.

Модель — это одна из частей шаблона проектирования MVC предназначенная для работы с базой данных и содержащая всю бизнес-логику приложения. В Yii2 для работы с моделью используется класс ActiveRecord, предоставляющий, объектно-ориентированный подход для манипуляции данными. Каждый такой класс отражает в себе одну таблицу базы данных. И соответственно через этот класс и происходит работа с таблицей. Давайте посмотри простейшую реализацию ActiveRecord для таблицы article.

Создадим в базе данных таблицу article (а так же не забываем указать в конфиге доступ к бд)

activerecord_table_article

В папке model создадим файл Article.php и добавим в него такой код:

 

 

Для того что бы иметь доступ к основным функциям модели, достаточно в классе указать одну функцию tableName() , которая возвращает название таблицы.

Добавление данных

Попробуем сохранить данные в нашу таблицу. Для этого в контроллере объявим модель.

И в методе index напишем:

Вызвав данную функцию, в нашей таблице article создастся новая запись. «Магия» ActiveRecord в том, что каждый столбец таблицы трансформируется в свойство класса, таким образом обеспечивая объектно-ориентированный подход. Метод save() сохраняет или обновляет запись в таблице. Этот метод принимает один параметр типа boolean — по умолчанию true определяющий вызывать валидацию данных или нет.

Выборка данных

Мы добавили в таблицу данные, теперь попробуем их получить. В том же методе контроллера напишем такой код:

Выполнив этот код вы увидите массив объектов ActiveRecord содержащий все данные. В нашем случае мы не передавали каких либо условий и в конце написали ->all() что означает, вернуть все записи. Для работы с массивом данных обычно используется конструкция foreach:

Через свойства объекта мы можем обратиться к каждому столбцу таблицы и вывести всё на экран.

Изменив в построителе запроса ActiveRecord all() на one() мы можем получить первую запись.

В данном случае нам вернется не массив а один объект.

Аналогично предыдущем способу, мы можем вернуть одну запись по значению id.

Условия выборки

Кончено в реальных приложениях SQL запросы бывают достаточно сложными и к счастью в большинстве случаев ActiveRecord предоставлят возможность формировать такие запросы за счет построителя запросов.

  1. WHERE — наиболее важное и распространенное условие. Рассмотрим несколько вариантов использования.

    Данные строки эквивалентны друг другу и вернут одну и ту же строку с id = 2. Но через массив(второй вариант использования) вы можете задать 2 и более условия выборки:

    Во всех предыдущих случаях where работает через оператор «=», но вам могут понадобиться другие операторы, такие как >, <, like, between и т.д. Эта задача так же легко решается.
  2. LIMIT — аналогично SQL оператору, задает количество возвращаемых записей. Обычно используется с оператором OFFSET задающий начальный отступ записей:
  3. ORDERBY — используется для сортировки записей:
  4. GROUPBY — группировка записей:
  5. WITH — «жадная» загрузка связанных данных. Подробнее.
  6. SELECT — столбцы которые необходимо включить в выборку:

     

Мы рассмотрели основные элементы строителя запросовкоторый покрывают большинство требований приложения. Конечно вы можете объединять все элементы между собой:

Обновление данных

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

В данном случае запись с id = 1 обновиться. Необязательно при обновлении указывать все поля. Достаточно только те которые необходимо обновить, остальные останутся без изменений.

Внутри реализации ActiveRecord за поведение, определяющее добавлять запись или обновлять, отвечает публичное свойство isNewRecord типа boolean. С помощью этого свойства вы можете сами регулировать поведение модели:

Данный код, не будет обновлять запись, а создаст новую.

Удаление данных

Удаление данных очень похоже на обновление, только вместо метода save(), используется delete():

Выполнив данный код, мы удалим запись с id = 1.

Часто бывает необходимым удалить несколько записей по одному условию. Для этого есть функция deleteAll()

Параметры, которые принимает данная функция, аналогичны функции where().

 

Мы рассмотрели основы работы с моделью в yii2. В следующих статьях мы углубимся в работу с базой данных и поговорим о связях между таблицами и валидации данных.

 

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

Ваш e-mail не будет опубликован.