Yii consente di accedere a molti database come MySql, Postgree, MsSql e tutti quelli supportati da PDO. Infatti il Data Access Object (DAO) di Yii si basa appunto su PDO. Fondamentalmente ci sono 4 classi che compongono DAO. Queste sono:
CDbConnection
: rappresenta la connessione al databaseCDbCommand
: rappresenta una query sqlCDbDataReader
: rappresenta un result setCDbTranscation
: rappresenta una transazione sul database
La connessione al database
Per effettuare una connessione al database è sufficiente utilizzare la seguente riga di codice:
$connection=new CDbConnection($dsn,$username,$password);
La variabile $dsn
varia a seconda del database a cui ci colleghiamo. Nel caso di MySql, il database più utilizzato in accoppiata col PHP, il valore è nel formato:
mysql:host=localhost;dbname=mio database
Istanziando la classe connection abbiamo a disposizione una connessione con il database. Per chiudere la connessione è possibile utilizzare il comando
$connection->active=false;
La classe CdbConnection
estende la classe base CApplicationComponent. P
er questo motivo, all'interno del file di configurazione, trovavamo il codice che definisce la nostra connessione. Nella lista dei componenti attivi infatti, è presente db. Il motivo è che in questo modo in qualsiasi punto dell'applicazione è sempre disponibile una connessione attiva con il database.
Per accedere alla connessione definita nel file di configurazione si può utilizzare la seguente sintassi:
$db = Yii::app()->db;
Le operazioni Crud
Dopo aver visto come connetterci al database è giunto il momento di vedere come effettuare le operazioni CRUD su di esso. Il primo passo è quello di creare una istanza dell' oggetto CDbCommand scrivendo:
$command=$connection->createCommand($sql);
Se la nostra query è di tipo insert
, update
o delete
allora è sufficiente invocare il metodo execute
che restituisce il numero di righe interessate dalla query:
$rowCount=$command->execute();
Se passiamo una query di selezione allora utilizziamo i seguenti metodi:
$dataReader=$command->query();
$rows=$command->queryAll();
La differenza dei due metodi consiste nel fatto che, nel primo caso, otterremo un dataReader
come risultato mentre nel secondo un array contenente i dati. Per recuperare i dati da un dataReader si utilizza il codice che segue:
while (($row=$dataReader->read())!==false)
{
[...]
}
oppure
foreach ($dataReader as $row)
{
[...]
}
E per finire usiamo
$rows=$dataReader->readAll();
per includere tutto il contenuto del dataReader in un array.
Le transazioni
Prima di concludere la breve panoramica su DAO, dobbiamo chiarire in che modo Yii utilizza le transazioni. Come abbiamo detto DAO si appoggia su PDO quindi valgono gli stessi criteri. Una transazione può essere iniziata con
$transaction=$connection->beginTransaction();
per effettuare il commit:
$transaction->commit();
mentre per il rollBack:
$transaction->rollBack();