Учебники

Yii — Активная запись

Active Record предоставляет объектно-ориентированный API для доступа к данным. Класс Active Record связан с таблицей базы данных.

Yii обеспечивает поддержку Active Record для следующих реляционных баз данных:

  • MySQL 4.1 или более поздняя версия
  • SQLite 2 и 3:
  • PostgreSQL 7.3 или более поздняя версия
  • Microsoft SQL Server 2008 или более поздняя версия
  • CUBRID 9,3 или позже
  • оракул
  • ElasticSearch
  • сфинкс

Кроме того, класс Active Record поддерживает следующие базы данных NoSQL:

  • Redis 2.6.12 или более поздняя версия
  • MongoDB 1.3.0 или более поздняя версия

После объявления класса Active Record (в нашем случае модель MyUser ) для отдельной таблицы базы данных, вы должны выполнить следующие шаги для запроса данных из него:

  • Создайте новый объект запроса, используя метод yii \ db \ ActiveRecord :: find ().
  • Создайте объект запроса.
  • Вызовите метод запроса для получения данных.

Шаг 1 — Модифицируйте метод actionTestDb () таким образом.

public function actionTestDb() {
   // return a single user whose ID is 1
   // SELECT * FROM `user` WHERE `id` = 1
   $user = MyUser::find()
      ->where(['id' => 1])
      ->one();
   var_dump($user);
   // return the number of users
   // SELECT COUNT(*) FROM `user`
   $users = MyUser::find()
      ->count();
   var_dump($users);
   // return all users and order them by their IDs
   // SELECT * FROM `user` ORDER BY `id`
   $users = MyUser::find()
      ->orderBy('id')
      ->all();
   var_dump($users);
}

Приведенный выше код показывает, как использовать ActiveQuery для запроса данных.

Шаг 2 — Перейдите по адресу http: // localhost: 8080 / index.php? R = site / test-db , вы увидите следующий вывод.

Активная запись

Выполнение запросов по значениям первичного ключа или набору значений столбцов является обычной задачей, поэтому Yii предоставляет следующие методы:

  • yii \ db \ ActiveRecord :: findOne () — возвращает один экземпляр Active Record.

  • yi \ db \ ActiveRecord :: findAll () — возвращает массив экземпляров Active Record.

yii \ db \ ActiveRecord :: findOne () — возвращает один экземпляр Active Record.

yi \ db \ ActiveRecord :: findAll () — возвращает массив экземпляров Active Record.

Пример

public function actionTestDb() {
   // returns a single customer whose ID is 1
   // SELECT * FROM `user` WHERE `id` = 1
   $user = MyUser::findOne(1);
   var_dump($user);
   // returns customers whose ID is 1,2,3, or 4
   // SELECT * FROM `user` WHERE `id` IN (1,2,3,4)
   $users = MyUser::findAll([1, 2, 3, 4]);
   var_dump($users);
   // returns a user whose ID is 5
   // SELECT * FROM `user` WHERE `id` = 5
   $user = MyUser::findOne([
      'id' => 5
   ]);
   var_dump($user);
}

Сохранить данные в базу данных

Чтобы сохранить данные в базе данных, вы должны вызвать метод yii \ db \ ActiveRecord :: save () .

Шаг 1 — Модифицируйте метод actionTestDb () таким образом.

public function actionTestDb() {
   // insert a new row of data
   $user = new MyUser();
   $user->name = 'MyCustomUser2';
   $user->email = '[email protected]';
   $user->save();
   var_dump($user->attributes);
   
   // update an existing row of data
   $user = MyUser::findOne(['name' => 'MyCustomUser2']);
   $user->email = '[email protected]';
   $user->save();
   var_dump($user->attributes);
}

Шаг 2 — Перейдите по адресу http: // localhost: 8080 / index.php? R = site / test-db , вы увидите следующий вывод.

Сохранить данные в базу данных

Чтобы удалить одну строку данных, вы должны —

  • Получить экземпляр активной записи

  • Вызовите метод yii \ db \ ActiveRecord :: delete ()

Получить экземпляр активной записи

Вызовите метод yii \ db \ ActiveRecord :: delete ()

Шаг 1 — Модифицируйте метод actionTestDb () таким образом.

public function actionTestDb() {
   $user = MyUser::findOne(2);
   if($user->delete()) {
      echo "deleted";
   } 
}

Шаг 2 — Введите http: // localhost: 8080 / index.php? R = site / test-db в адресной строке веб-браузера, вы увидите следующий вывод.

Удалить данные одной строки

Шаг 3 — Вы также можете вызвать метод yii \ db \ ActiveRecord :: deleteAll () для удаления, например, нескольких строк данных.