Behavior Linkable: dove non arriva Containable

Grazie al suggerimento di Tox che ha + fiuto del cane di Lycos nello scovare risorse in rete, ho provato il LinkableBehavior per risolvere un problema con una query che con Containable non riuscivo a rendere efficente.

Problema

Ho il seguente schema di modelli:
Regions hasMany District hasMany City hasMany Customer.
Ho necesità di ottenere l’elenco dei clienti (Customer) che risiedono nella provincia (District) di Torino (id=1).

Soluzione con LinkableBehavior

Model:

var $actsAs = array('Linkable');

Codice:

$customers = $this->District->City->Customer->find('all',array(
        'link'=>array('City'=>array('District')),
        'conditions'=>array('District.id'=>$id),
        'fields'=>array('Customer.id','Customer.nome','Customer.cognome','City.name')))

Risultato:


Array
(
    [0] => Array
        (
            [Customer] => Array
                (
                    [id] => 1
                    [nome] => Giuseppe
                    [cognome] => De Santis
                )

            [City] => Array
                (
                    [name] => Buttigliera Alta
                )

        )

)

Query eseguita (unica):

SELECT `Customer`.`id`, `Customer`.`nome`, `Customer`.`cognome`, `City`.`name` FROM `customers` AS `Customer` LEFT JOIN `cities` AS `City` ON (`City`.`id` = `Customer`.`city_id`) LEFT JOIN `districts` AS `District` ON (`District`.`id` = `City`.`district_id`) WHERE `District`.`id` = 1

Meglio di così….

Risorsa utile: http://planetcakephp.org/aggregator/items/891-linkable-behavior-taking-it-easy-in-your-db

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.