2014-03-02 26 views
0

在CakePHP应用程序中,让我们假设我有两个模型:Team和User。这些模型在HABTM关系中相互关联(由表team_users加入)。同时创建两个HABTM关联记录

假设我们有一个表单,某人可以同时指定详细信息以创建新的团队和用户。

什么是最简洁,最直接的方式来同时创建这些记录,并且彼此之间存在关联?

什么是命名表单域以及在Controller中处理的“陷阱”?

我想用最友好的方式做到这一点,这样我就可以在两种模型上都返回验证错误。

+0

你有什么试过的?你应该能够以正确的方式格式化数据,保存所有数据,然后完成。 – Dave

+0

并让它自动创建加入HABTM表记录来关联两个记录? –

+0

我这么认为。不是100%肯定,但.. – Dave

回答

0

这种方法会进入您的团队模型,假设所有assocs和HABTM设置正确。

public function createTeam($postData) { 
    $this->set($postData); 
    $this->User->set($postData); 
    $validTeam = $this->validates(); 
    $validUser = $this->User->validates() 

    if ($validTeam && $validUser) { 
     $this->create(); 
     $this->save($postData, array('validate' => false); 
     $this->User->create(); 
     $this->User->save($postData, array('validate' => false); 
     $this->TeamsUser->create(); 
     $this->TeamsUser->save(array(
      'TeamsUser' => array(
       'user_id' => $this->getLastInsertId() 
       'team_id' => $this->User->getLastInsertId() 
      ) 
     )); 
     return true; 
    } 
    return false; 
} 
+0

我可以看到这将如何工作! Cake是否无法通过简单的saveAll()或saveAssociated()创建关联?对于额外的代码是必需的,这有点令人失望。希望3.0能够简化这种事情! –

+0

我发现的问题是,在试图通过相同的表单保存两个模型时,只显示一个模型的字段验证错误... –

+0

saveAll()应该保存两个记录,但我认为它不会创建连接表记录。无论如何,saveAll()在过去是一个婊子。我不知道为什么你看到只有一个错误,与更多模型非常相似的代码适合我。 – burzum

相关问题