Yii - Record attivo
Active Record fornisce un'API orientata agli oggetti per l'accesso ai dati. Una classe Active Record è associata a una tabella di database.
Yii fornisce il supporto per Active Record per i seguenti database relazionali:
- MySQL 4.1 o successivo
- SQLite 2 e 3:
- PostgreSQL 7.3 o successivo
- Microsoft SQL Server 2008 o versioni successive
- CUBRID 9.3 o successivo
- Oracle
- ElasticSearch
- Sphinx
Inoltre, la classe Active Record supporta quanto segue NoSQL database -
- Redis 2.6.12 o successivo
- MongoDB 1.3.0 o versioni successive
Dopo aver dichiarato una classe Active Record (MyUser modello nel nostro caso) per una tabella di database separata, dovresti seguire questi passaggi per interrogare i dati da essa -
- Crea un nuovo oggetto query, utilizzando il metodo yii \ db \ ActiveRecord :: find ().
- Costruisci l'oggetto query.
- Chiama un metodo di query per recuperare i dati.
Step 1 - Modifica il file actionTestDb() metodo in questo modo.
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);
}
Il codice riportato sopra mostra come utilizzare ActiveQuery per eseguire query sui dati.
Step 2 - Vai a http://localhost:8080/index.php?r=site/test-db, vedrai il seguente output.
L'interrogazione per valori di chiave primaria o un insieme di valori di colonna è un'attività comune, ecco perché Yii fornisce i seguenti metodi:
yii\db\ActiveRecord::findOne() - Restituisce una singola istanza di Active Record
yi\db\ActiveRecord::findAll() - Restituisce un array di istanze di 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);
}
Salva i dati nel database
Per salvare i dati nel database, è necessario chiamare il file yii\db\ActiveRecord::save() metodo.
Step 1 - Modifica il file actionTestDb() metodo in questo modo.
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 - Vai a http://localhost:8080/index.php?r=site/test-db, vedrai il seguente output.
Per eliminare una singola riga di dati, dovresti:
Recupera l'istanza di Active Record
Chiama il yii\db\ActiveRecord::delete() metodo
Step 1 - Modifica il file actionTestDb() metodo in questo modo.
public function actionTestDb() {
$user = MyUser::findOne(2);
if($user->delete()) {
echo "deleted";
}
}
Step 2 - Tipo http://localhost:8080/index.php?r=site/test-db nella barra degli indirizzi del browser web, vedrai il seguente output.
Step 3 - Puoi anche chiamare il yii\db\ActiveRecord::deleteAll() metodo per eliminare più righe di dati, ad esempio.
public function actionTestDb() {
MyUser::deleteAll('id >= 20');
}