Yii-active-record

提供:Dev Guides
移動先:案内検索

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()*-単一のアクティブレコードインスタンスを返します
  • * 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() メソッドを呼び出します

ステップ1 *-このように actionTestDb()*メソッドを変更します。

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

ステップ2 *-Webブラウザのアドレスバーに *http://localhost:8080/index.php?r = site/test-db と入力すると、次の出力が表示されます。

単一行データの削除

ステップ3 *- yii \ db \ ActiveRecord
deleteAll()*メソッドを呼び出して、複数のデータ行を削除することもできます。
public function actionTestDb() {
    MyUser::deleteAll('id >= 20');
}