2013-06-20 8 views
0

J'essaie de faire une jointure manuelle car je m'attendais à obtenir un meilleur résultat de requête que CakePHP.Manuel JOIN sur CakePHP

Ceci est mon codage du contrôleur

$this->ClinicWishList->contain(); 
$this->set('recordSets', $this->ClinicWishList->find('all', array(
    'fields' => array('ClinicWishList.*', 'ApplicantIssue.issue_desc', 'User.nickname', 'User.role'), 
    'joins' => array(
    array(
     'table' => 'applicant_issues', 
     'alias' => 'ApplicantIssue', 
     'type' => 'left outer', 
     'foreignKey' => false, 
     'conditions' => array('ClinicWishList.issue_id' => 'ApplicantIssue.id') 
    ), 
    array(
     'table' => 'users', 
     'alias' => 'User', 
     'type' => 'left outer', 
     'foreignKey' => false, 
     'conditions' => array('ApplicantIssue.user_id' => 'User.id') 
    )), 
    'conditions' => array('ClinicWishList.user_id' => $this->Auth->user('id')), 
    'order' => 'ClinicWishList.created DESC' 
))); 

CakePHP produit SQL comme celui-ci.

enter image description here

Il n'y a pas d'erreur mais je m'y suis fait vide de la table jointe comme celui-ci.

enter image description here

J'ai copié le SQL et a essayé d'exécuter l'outil GUI, je suis cet avertissement.

enter image description here

Comment modifier le codage dans CakePHP pour obtenir SQL comme

enter image description here

au lieu de cette

enter image description here

S'il vous plaît aider, merci.

Répondre

0

Vous devez modifier cette ligne:

'conditions' => array('ClinicWishList.issue_id' => 'ApplicantIssue.id') 

à:

'conditions' => array('`ClinicWishList`.`issue_id` = `ApplicantIssue`.`id`') 

changer cette ligne:

'conditions' => array('ApplicantIssue.user_id' => 'User.id') 

à:

'conditions' => array('`ApplicantIssue`.`user_id` = `User`.`id`')