2010-08-21 52 views
0

CakePHP的新尝试,并尝试我的第一次加入。我有一个名为用户的表格和一个名为项目的表格。一个用户可以有很多项目,所以项目有一个user_id列。CakePHP表加入帮助

这是我在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') 
     ) 
    )))); 




} 

这里是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 

正如你将看到的一切似乎除了它从用户表中未选择任何东西不错,但它是加入它。

这是我的观点:

<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; ?> 

有我搞砸了什么地方?该视图尝试列出所有项目以及拥有它的用户。

非常感谢,

Jonesy

+0

你想达到什么目的?如果所有项目都有与之关联的用户,那么在这种情况下,内部联接的行为就像左连接一样。如果您试图按用户列出所有项目,那么您需要在'User'模型上进行查找并将项目表内部连接到它。 – 2010-08-21 10:31:20

+0

我更新了我的问题,我想列出项目表中的所有项目并加入用户,这样我可以列出项目名称和创建它的用户,因此这是在projects_controller – iamjonesy 2010-08-21 10:43:48

+0

我已将SQL转储和更新的视图添加到我的问题 – iamjonesy 2010-08-21 10:55:58

回答

1

发现了什么,我想通过编辑项目模型来实现:

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

这并获得成功!