Yii: Esempi con le query builder

Yii: Esempi con le query builder

4754
0
CONDIVIDI

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
                   )
          );