In questo articolo mostrerò come effettuare delle semplici query (insert, update e select) utilizzando gli oggetti di Yii in maniera semplice ed intuitiva. Query Builder consente l’utilizzo di metodi di accesso al database (DAO).
Prima degli esempi elencherò una tabella esplicativa contenente i metodi principali, dopodiché passerò agli esempi pratici:
Metodo | Equivalente MYSQL | Note |
---|---|---|
->select() | SELECT | |
->selectDistinct() | SELECT DISTINCT | |
->from() | FROM | |
->where() | WHERE | |
->andWhere() | AND | equivalente dell’operatore AND, questo metodo va aggiunto solo in presenza di ->where() |
->orWhere() | OR | equivalente dell’operatore OR, questo metodo va aggiunto solo in presenza di ->where() |
->join() | JOIN | Anche: leftJoin, innerJoin, rightJoin, crossJoin, naturalJoin |
->group() | GROUP BY | |
->having() | HAVING | |
->order() | ORDER BY | |
->limit() | LIMIT | |
->offset() | OFFSET |
Select
Di seguito alcuni esempi del corretto utilizzo del metodo SELECT:
Select All
Esempio fetch di più righe con createCommand di Yii
Equivalente MYSQL:
SELECT * FROM tabella WHERE condizione = "valore"
Select con metodi Yii:
$results = Yii::app()->db->createCommand()
->select('*')
->from('tabella')
->where('condizione = "valore"')
->queryAll();
Esempio di scorrimento degli elementi:
if($results)
{
foreach($results as $res)
{
echo $res['nome_campo'];
}
}
Select Row
Se, invece, volessi selezionare una sola riga il comando da utilizzare è queryRow, esempio:
$result = Yii::app()->db->createCommand()
->select('*')
->from('tabella')
->where('condizione = "valore"')
->queryRow();
Esempio di lettura riga:
if($results)
{
echo $result['nome_campo'];
}
Count e SUM
Per effettuare una COUNT o una SUM bisogna utilizzare il metodo QueryScalar che andiamo subito a vedere:
$result = Yii::app()->db->createCommand()
->select('count(nome_campo) as x')
->from('tabella')
->queryScalar();
oppure:
$result = Yii::app()->db->createCommand()
->select('sum(nome_campo) as x')
->from('tabella')
->queryScalar();
Risultato:
echo $result['x'];
Query con più oggetti
Una query più complessa potrebbe cosi strutturarsi:
Equivalente MYSQL:
SELECT *
FROM tabella as T
JOIN nuova_tabella as N ON T.id_campo = N.id_campo
WHERE condizione = "valore" AND condizione2 = "valore2"
ORDER BY T.nome DESC
Utilizzando i metodi Yii diventa:
$result = Yii::app()->db->createCommand()
->select('*')
->from('tabella T')
->join('nuova_tabella N', 'T.id_campo = N.id_campo')
->where('condizione = "valore"')
->andWhere('condizione2 = "valore2"')
->order('T.nome DESC')
->queryAll();
Insert
Effettuare un inserimento di una riga in un database con Yii è molto semplice, ecco alcuni esempi:
Equivalente MYSQL:
INSERT INTO tabella(campo1, campo2, campo3) VALUES("valore 1", "valore 2", "valore 3");
$insert = Yii::app()->db->createCommand()
->insert('tabella',
array(
'campo1' => "valore 1",
'campo2' => "valore 1",
'campo3' => "valore 1"
)
);
Restituisce l’ID dell’inserimento su campo auto increment o false se l’inserimento non è andato a buon fine.
Update
Simile all’insert, l’update su una tabella prevede ovviamente la possibilità di applicare una condizione, esempio:
Equivalente MYSQL:
UPDATE tabella SET campo1 = "valore 1" WHERE ID = $id
$update = Yii::app()->db->createCommand()
->update('tabella',
array(
'campo1' => "valore 1"
),
'ID = ' . $id
);
Delete
Infine la cancellazione di un record:
Equivalente MYSQL
DELETE FROM tabella WHERE id = $id
$delete = Yii::app()->db->createCommand()
->delete('tabella',
array(
'ID' => $id
)
);