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:
[php]var $actsAs = array(‘Linkable’);[/php]

Codice:
[php]
$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’)))
[/php]
Risultato:
[php]

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

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

)

)
[/php]
Query eseguita (unica):
[php]
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
[/php]
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 *