Je suis relativement nouveau à CakePHP, je me débrouille bien avec la documentation, mais j'ai essayé de trouver une solution à ce problème pendant des semaines et je ne trouve pas la solution, je suis sûr que c'est facile et peut-être même faisable, mais je ne sais pas comment le trouver (peut-être que je ne connais pas le jargon pour ce genre de choses)CakePHP associations de modèles à 3 niveaux de profondeur
Ma structure de modèle est comme ceci:
... et ainsi de suite avec les modèles utilisateur, ville, pays et transport. Ce que j'essaye de réaliser est d'obtenir toute l'information de l'arbre entier quand je recherche Trip
.
<?php
class TripController extends AppController {
function index() {
debug($this->Trip->find('first'));
}
}
Sorties
Array
(
[Trip] => Array
(
[id] => 6
[created] => 2010-05-04 00:23:59
[user_id] => 4
[start_id] => 2
[end_id] => 1
[title] => My trip
[transport_id] => 1
)
[User] => Array
(
[id] => 4
[name] => John Doe
[email] => [email protected]
)
[Start] => Array
(
[id] => 2
[user_id] => 4
[country_id] => 1
[state_id] => 1
[city_id] => 1
[direccion] => Lincoln Street
)
[End] => Array
(
[id] => 1
[user_id] => 4
[country_id] => 1
[state_id] => 1
[city_id] => 4
[address] => Fifth Avenue
)
[Transport] => Array
(
[id] => 1
[name] => car
)
)
Voici la question: Comment puis-je obtenir dans une requête toutes les informations dans l'arbre?
Je voudrais avoir quelque chose comme
Array
(
[Trip] => Array
(
[id] => 6
[created] => 2010-05-04 00:23:59
[User] => Array
(
[id] => 4
[name] => John Doe
[email] => [email protected]
)
[Start] => Array
(
[id] => 2
[user_id] => 4
[Country] => Array
(
[id] => 1
[name] = Spain
)
[State] => Array
(
[id] => 1
[name] = Barcelona
)
[City] => Array
(
[id] => 1
[name] = La Floresta
)
[address] => Lincoln Street
)
[End] => (same as Start)
[title] => My trip
[Transport] => Array
(
[id] => 1
[name] => car
)
)
)
Can CakePHP créer ce genre de données? Non seulement pour $this->Model->find()
mais aussi pour $this->paginate()
comme par exemple:
// filter by start
if(isset($this->passedArgs['start'])) {
//debug('isset '.$this->passedArgs['start']);
$start = $this->passedArgs['start'];
$this->paginate['conditions'][] = array(
'OR' => array(
'Start.address LIKE' => "%$start%",
'Start.State.name LIKE' => "%$start%",
'Start.City.name LIKE' => "%$start%",
'Start.Country.name LIKE' => "%$start%"
)
);
$this->data['Search']['start'] = $start;
}
Il semble être une question difficile, mais je suis sûr que cela est largement documenté et fait, je vous en serais reconnaissant toute aide.
Ou '$ this-> Trip-> find ('first', array ('récursive' => 2));' – bancer
Tout simplement magnifique. Merci un million paullb et bancer! –
cela semble être génial, mais - avec beaucoup d'associations, je ne peux pas utiliser 2 récursif sans avoir d'erreurs de mémoire - même si je le limite à un résultat (comme 'premier'). Des idées? – Dave