Yii - Dossier actif

Active Record fournit une API orientée objet pour accéder aux données. Une classe Active Record est associée à une table de base de données.

Yii fournit le support Active Record pour les bases de données relationnelles suivantes -

  • MySQL 4.1 ou version ultérieure
  • SQLite 2 et 3:
  • PostgreSQL 7.3 ou version ultérieure
  • Microsoft SQL Server 2008 ou version ultérieure
  • CUBRID 9.3 ou version ultérieure
  • Oracle
  • ElasticSearch
  • Sphinx

En outre, la classe Active Record prend en charge les éléments suivants NoSQL bases de données -

  • Redis 2.6.12 ou version ultérieure
  • MongoDB 1.3.0 ou version ultérieure

Après avoir déclaré une classe Active Record (MyUser modèle dans notre cas) pour une table de base de données distincte, vous devez suivre ces étapes pour en interroger les données -

  • Créez un nouvel objet de requête, en utilisant la méthode yii \ db \ ActiveRecord :: find ().
  • Créez l'objet de requête.
  • Appelez une méthode de requête pour récupérer des données.

Step 1 - Modifier le actionTestDb() méthode de cette façon.

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);
}

Le code donné ci-dessus montre comment utiliser ActiveQuery pour interroger des données.

Step 2 - Aller à http://localhost:8080/index.php?r=site/test-db, vous verrez la sortie suivante.

L'interrogation par des valeurs de clé primaire ou un ensemble de valeurs de colonne est une tâche courante, c'est pourquoi Yii fournit les méthodes suivantes:

  • yii\db\ActiveRecord::findOne() - Renvoie une seule instance Active Record

  • yi\db\ActiveRecord::findAll() - Renvoie un tableau d'instances Active Record

Example -

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);
}

Enregistrer les données dans la base de données

Pour enregistrer des données dans la base de données, vous devez appeler le yii\db\ActiveRecord::save() méthode.

Step 1 - Modifier le actionTestDb() méthode de cette façon.

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);
}

Step 2 - Aller à http://localhost:8080/index.php?r=site/test-db, vous verrez la sortie suivante.

Pour supprimer une seule ligne de données, vous devez -

  • Récupérer l'instance Active Record

  • Appeler le yii\db\ActiveRecord::delete() méthode

Step 1 - Modifier le actionTestDb() méthode de cette façon.

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

Step 2 - Type http://localhost:8080/index.php?r=site/test-db dans la barre d'adresse du navigateur Web, vous verrez la sortie suivante.

Step 3 - Vous pouvez également appeler le yii\db\ActiveRecord::deleteAll() méthode pour supprimer plusieurs lignes de données, par exemple.

public function actionTestDb() {
    MyUser::deleteAll('id >= 20');
}