Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Используем ActiveRecord в Yii2

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Automated Testing With Codeception
How to Program With Yii2: Running Cron Services

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Final product image
What You'll Be Creating

Если у вас возникают вопросы: «Что такое Yii?» Ознакомьтесь с моим предыдущим руководством: Знакомство с Yii Framework, в котором рассмотрены преимущества Yii и представлен обзор изменений в Yii 2.0, выпущенных в октябре 2014 года.

В этой серии статей о программировании в Yii2 я рассказывают своим читателям как использовать фреймворк Yii2 для PHP. В сегодняшнем учебнике я расскажу вам об объектно-реляционном отображении в Yii, известном как ORM, для работы с базами данных. Этот шаблон называется Active Record и является ключевым аспектом программирования приложений баз данных в Yii.

Yii предлагает различные способы программной работы с вашей базой данных, такие как прямые запросы и построитель запросов, но использование Active Record предоставляет полный набор преимуществ для объектно-ориентированного программирования баз данных. Ваша работа становится более эффективной, более безопасной, работает в контексте архитектуры MVC и является переносимой, если вы решите изменить платформу баз данных (например, MySQL на PostgreSQL).

Следуйте за мной и я подробно расскажу об основах Active Record в Yii.

Напоминаю, что я активно участвую в обсуждениях, приведенных ниже. Меня особенно интересует, есть ли у вас разные подходы, дополнительные идеи или вы хотите предложить темы для будущих уроков. Если у вас есть вопрос или предложение, отправьте сообщение ниже. Вы также можете связаться со мной прямо в Twitter @reifman.

Что такое активная запись?

Архитектура MVC является одним из ключевых преимуществ в Yii. Active Record предоставляет объектно-ориентированное решение для работы с вашими базами данных, которое тесно интегрировано с Yii-моделями. Согласно Википедии, общий термин «Active Record» был «предложен Мартином Фаулером в его книге «Архитектура корпоративных программных приложений» в 2003 году".

В документации Yii это описано кратко:

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

Интеграция паттерна Active Record в Yii - сильная сторона фреймворка, но общая для большинства других фреймворков, таких как Ruby on Rails.

Эта абстракция от моделей к таблицам базы данных позволяет фреймворку выполнять тяжелую работу по обеспечению безопасности, включая защиту от SQL-инъекций.

Active Record в Yii также поддерживает переносимость во многих базах данных. Вы можете переключаться между базами данных без необходимости менять свой код:

  • MySQL 4.1 или более поздние версии
  • PostgreSQL 7.3 или новее
  • SQLite 2 и 3
  • Microsoft SQL Server 2008 или новее
  • CUBRID 9.3 или новее
  • Oracle
  • Sphinx: через yii\sphinx\ActiveRecord, требуется расширение yii2-sphinx
  • ElasticSearch: через yii\elasticsearch\ActiveRecord, требуется расширение yii2-elasticsearch

И следующие базы данных NoSQL:

  • Redis 2.6.12 или новее: через yii\redis\ActiveRecord, требуется расширение yii2-redis
  • MongoDB 1.3.0 или более поздняя версия: через yii\mongodb\ActiveRecord, требуется расширение yii2-mongodb

Изучение основ

В предыдущем эпизоде «Как программировать с Yii2: работа с базой данных и Active Record» я рассмотрел создание вашей базы данных, то как Yii подключается к ней для каждого сеанса, использование миграций для создания таблиц базы данных и использование Gii (полезный генератор кода Yii) для создания кода модели по умолчанию. Если вы не знакомы со всем этим, просмотрите этот эпизод.

В данном эпизоде я больше сконцентрируюсь на использовании Active Record в вашем коде.

Объявление класса модели Active Record

Во-первых, позвольте мне рассмотреть, как преобразовать модель Yii для использования Active Record. Я воспользуюсь примером модели, которую я создал в серии «Создаем свой стартап». Эта серия покажет вам, как я с нуля создаю свой стартап, Meeting Planner, в Yii2.

Я воспользуюсь примером простой модели, которую я создал под названием Launch, которая позволяет посетителям домашней страницы предоставлять свой адрес электронной почты, если они хотят получать уведомление, когда продукт вышел из превью и полностью запущен.

Yii2 Programming Active Record - Example of Home Page Launch Email Gathering

Использование Active Record в модели довольно просто; Обратите внимание, что class Launch extends \yii\db\ActiveRecord:

И это все.

Создание запросов

Давайте рассмотрим некоторые распространенные запросы Active Record.

Индивидуальные записи

Если у вас есть идентификатор записи, который часто мы получаем из параметра запроса в контроллере, то будет довольно легко найти требуемую запись:

Это идентично:

Вы также можете расширить ->where массив большим количеством полей или булевых условий:

Несколько записей

Вот пример поиска всех записей, которые соответствуют определенному status, отсортированные по $id:

Метод ->all(); выбирает все записи, а не только одну. В переменную $people возвращается массив объектов модели. В противном случае, когда нет условий, вы можете получить доступ ко всем записям с помощью ->findAll();

Возвращение массива

Использование indexBy возвращает массив элементов, индексированных по id:

Альтернативно, вы можете вернуть ассоциативный массив с ->asArray():

Примечание. В документация Yii сказано: «Хотя этот метод экономит память и повышает производительность, он расположен ближе к нижнему уровню абстракции БД, и вы потеряете большинство функций Active Record».

Подсчет записей

Вы также можете вернуть только count записей из запроса:

Для подсчета статистики я использую много значений в Планировщике встреч; узнайте больше в нашем эпизоде про панель Dashboard:

Доступ к данным

Когда вы запрашиваете данные, такие как отдельная модель, легко получить доступ к данным как к объекту модели:

Я часто обрабатываю массивы таким образом:

Массовое присвоение

Вы также можете быстро присвоить массив записи модели с помощью ActiveRecord:

Это часто используется для заполнения данных модели после отправки формы:

Или вы можете использовать ->load() для этого:

Генератор кода Yii Gii отлично подходит для создания моделей с использованием ActiveRecord, который может сгенерировать много полезного кода, как например модели, контроллеры, формы, отображение и т.д.

Сохранение данных

Как вы можете видеть выше, сохранить данные в Active Record также легко. В этом примере из документации Yii создается и сохраняется новая запись, а затем запись загружается по идентификатору, и сохраняются обновления:

Удаление записей

Удаление записи еще проще:

Обновление счетчиков

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

Связи

Связывание таблиц по индексам - одна из самых мощных возможностей Active Record. Например, в Planner Meeting каждое собрание может иметь 0 или более MeetingPlaces. Модель Meeting.php определяет реляционный ActiveQuery для этого:

Затем я могу получить доступ ко всем местам встречи с помощью свойства $meetingPlaces. Ниже я загружаю собрание и перебираю все его meetingPlaces довольно легко, как если бы это был встроенный массив подобъектов:

Конечно, все зависит от создания внешнего ключа при создании таблицы в ее миграции:

Что дальше

Надеюсь, вы получили простое представление об удивительной популярности Active Records. Сюда также входят жизненные циклы, транзакции и блокировка, о которых я могу написать в будущем. Если вы хотите сделать шаг вперед, Yii2 предлагает две большие области для более подробного изучения в своей документации: Yii2 Руководство по Active Record и функциональные спецификации Yii2 Active Record. Это хорошо написанные статьи.

Следите за предстоящими уроками в серии Программирование на Yii2, где мы продолжаем погружаться в различные аспекты фреймворка. Вы также можете ознакомиться с вышеупомянутой статьей «Создание своего стартапа на PHP».

Если вы хотите знать, когда появится следующий учебник по Yii2, следуйте за мной @reifman в Twitter или проверьте мою страницу инструктора.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.