Utilizzare operatori sql in CakePHP find()

Riporto il sunto di una discussione sviluppata sul Gruppo Google di CakePHP inerente all’utilizzo di operatori SQL nelle operazioni di estrazione dati (finder query):
http://groups.google.com/group/cake-php/browse_thread/thread/89dd8a8846bad3a1?hl=en

L’autore ha la necessità di estrarre da un campo di testo un numero limitato di caratteri utilizzando l’operatore SQL LEFT:

LEFT(Table.field, len) as new_field_name

La soluzione proposta (e testata) consiste nell’utilizzo dell’operatore direttamente nell’elenco dei campi da estrarre come parametro aggiuntivo dell’operazione find().

$list = $this->User->find( "all", array(
  fields = array(
    'id',
    'username',
    'left(User.username, 5) as short_username'
  )
));

Questo comando di estrazione genera come output la seguente struttura associativa:

array(
  0 => array(
    [User] => array(
      [id] => 1
      [username] = Marco Pegoraro
    )
    [0] => array(
      [short_username] => Marco
    )
  )
)

Si può dunque notare come il campo ottenuto mediante operatore SQL sia stato erogato fuori dal raggruppamento del modello e inserito sotto ad un indice numerico.

Ho fatto alcuni test utilizzando le relazioni tra i modelli (belongsTo) e ho estratto campi da più modelli definendo campi elaborati da più modelli. Tali campi vengono sempre proposti sotto l’indice 0.

Al momento in cui scrivo la discussione è in attesa di una soluzione per modificare in modo esplicito il nome del raggruppamento di questi campi prodotto di un operatore SQL.

Alcune risorse utili:

  1. No comments yet.

  1. No trackbacks yet.