Bonjour,
j'ai appris récemment les bases de cakePHP2 ici, et je voudrais l'utiliser pour un de mes projets de site.
Je bute un peu sur la fabrication de requête en utilisant le modèle lorsqu'il y'a + de 2 tables à joindre.
Le contexte :
Un groupe de concessions automobiles multi marques, chaque concessions proposent plusieurs marques mais pas toujours les même.
Chaque marques proposent une gamme de modèle et chaque concessions à un lot de véhicules d'occasions.
J'arrive donc à une bdd comme ça :

Lien pour voir en grand : Image de la bdd
Sur la page où j'affiche un modèle d'une marque, je souhaite aussi indiquer la liste de mes concessions qui font cette marque, ainsi que tous les véhicules d'occasions de ce modèle.
La pratique :
J'ai essayé d'utiliser les différentes possibilités que j'ai trouvé pour construire mes requêtes dans le modèle (hasMany,belongsTo,hasAndBelongsToMany, ...) mais j'ai une erreur qui me dit qu'il ne trouve pas de modele_id dans ma table concessions, ce qui est normal.
Du coup j'ai construit ma requête dans le controller comme cela :
<?php
class JfcmodelesController extends AppController {
function index() {
$d'modeles'] = $this->Jfcmodele->find('first',array(
'conditions' => array(
'Jfcmodele.slug' => $this->params'modele']
)
));
$this->loadModel('Concession');
$d'concessions'] = $this->Concession->find('all', array(
'joins' => array(
array(
'alias' => 'Concession_Marque',
'table' => 'concession_marques',
'type' => 'LEFT',
'conditions' => 'Concession.id = Concession_Marque.concession_id'
)
),
'conditions' => array(
'Concession_Marque.marque_id' => $d'modeles']'Jfcmodele']'marque_id']
)
));
$this->loadModel('Vehicule');
$d'occasions'] = $this->Vehicule->find('all', array(
'limit' => 5,
'order' => 'Vehicule.prix DESC',
'fields' => array('Marque.name','Vehicule.prix','Jfcmodele.name','Media_Vehicule.url','Media_Vehicule.name'),
'joins' => array(
array(
'alias' => 'Marque',
'table' => 'marques',
'type' => 'LEFT',
'conditions' => 'Marque.id = Vehicule.marque_id'
),
array(
'alias' => 'Jfcmodele',
'table' => 'jfcmodeles',
'type' => 'LEFT',
'conditions' => 'Jfcmodele.id = Vehicule.Jfcmodele_id'
),
array(
'alias' => 'Media_Vehicule',
'table' => 'media_vehicules',
'type' => 'LEFT',
'conditions' => 'Media_Vehicule.vehicule_id = Vehicule.id'
)
),
'conditions' => array(
'Jfcmodele.slug' => $this->params'modele'],
'vond' => 'VO'
)
));
$this->set($d);
}
}
?>
Est ce la seule solution ? je me dis que ce n'est pas la façon la plus propre pour coder sur cakePhp.
Et surtout que cela ne vas pas m'aider pour utiliser plus tard les beforSave ou afterSave.
Bref qu'en pensez vous?
Merci