2010-08-21 5 views
0

nouveau à cakePHP et essayant ma première jointure. J'ai une table appelée utilisateurs et une appelée projets. un utilisateur peut avoir plusieurs projets, alors les projets ont une colonne user_id.Les tables de CakePHP joignent l'aide

Voici mon action dans projects_controller:

function index() { 

    $this->set('projects', $this->Project->find('all', array('joins' => array(
     array(
      'table' => 'users', 
      'alias' => 'UsersTable', 
      'type' => 'inner', 
      'foreginKey' => false, 
      'conditions' => array('UsersTable.id = Project.user_id') 
     ) 
    )))); 




} 

Voici le dump SQL:

SELECT `Project`.`id`, `Project`.`title`, `Project`.`created`, `Project`.`website`, `Project`.`language_id`, `Project`.`user_id` FROM `projects` AS `Project` inner JOIN users AS `UsersTable` ON (`UsersTable`.`id` = `Project`.`user_id`) WHERE 1 = 1 

Comme vous le verrez tout semble bien sauf son tout pour ne pas sélectionner de la table des utilisateurs, mais il est le rejoindre.

Et voici mon avis:

<table> 
<tr> 
    <th>Name</th> 
    <th>User</th> 
</tr> 



<?php foreach ($projects as $project): ?> 
<tr> 
    <td> 
     <?php echo $html->link($project['Project']['title'], array('controller' => 'projects', 'action' => 'view', $project['Project']['id'])); ?> 
    </td> 
    <td> 
     <?php echo $html->link($project['Project']['username'], array('controller' => 'users', 'action' => 'view', $project['Project']['user_id'])); ?> 
    </td> 
</tr> 
<?php endforeach; ?> 

Ai-je foiré quelque part? la vue tente de répertorier tous les projets avec l'utilisateur qui en est le propriétaire.

Merci beaucoup,

Jonesy

+0

Qu'essayez-vous d'accomplir? Si tous les projets ont un utilisateur associé, alors la jointure interne se comportera exactement comme une jointure gauche dans ce cas. Si vous essayez de lister tous les projets par utilisateur, alors vous devez faire une recherche sur le modèle 'User' et joindre à l'interne la table des projets. –

+0

J'ai mis à jour ma question, je veux lister tous les projets dans la table des projets et rejoindre les utilisateurs afin que je puisse lister le nom du projet et l'utilisateur qui l'a créé afin qu'il soit dans le projects_controller – iamjonesy

+0

ma question – iamjonesy

Répondre

1

Trouvé que ce que je voulais réaliser en éditant le modèle de projets:

var $belongsTo = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'user_id' 
    ) 
); 

Ce fait l'affaire!

Questions connexes