Yii-active-record
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');
}