2014-01-19 111 views
0

我一直在試圖將兩個外鍵保存到連接表的同一行,但沒有成功。我的Client型號與UserGroup型號有兩個HABTM關聯,用戶可以擁有許多客戶端,並可以在許多不同的組下創建客戶端。CakePHP - 一個HABTM有兩個外鍵

的UserClient連接表看起來是這樣的:

+----+---------+----------+-----------+ 
| id | user_id | group_id | client_id | 
+----+---------+----------+-----------+ 
| 1 |  1 |  1 |   1 | 
| 2 |  1 |  2 |   2 | 
| 3 |  3 |  4 |   3 | 
+----+---------+---------+------------+ 

客戶端模式:

public $hasAndBelongsToMany = array(
    'User' => array(
     'className' => 'User', 
     'joinTable' => 'UserClient', 
     'foreignKey' => 'client_id', 
     'associationForeignKey' => 'user_id' 
    ), 
    'Group' => array(
     'className' => 'Group', 
     'joinTable' => 'UserClient', 
     'foreignKey' => 'client_id', 
     'associationForeignKey' => 'group_id' 
    ) 
); 

客戶視圖:

<?php echo $this->Form->create('Client'); ?> 
    <fieldset> 
     <legend><?php echo __('Add Client'); ?></legend> 
    <?php 
     echo $this->Form->input('first_name'); 
     echo $this->Form->input('last_name'); 
     echo $this->Form->input('email'); 
     echo $this->Form->input('phone'); 

     echo $this->Form->input('Client', array('multiple'=> 'false', 'options' => $group_ids)); 
     echo $this->Form->hidden('User', array('value' => $user_id)); 
    ?> 
    </fieldset> 
<?php echo $this->Form->end(__('Submit')); ?> 

這個工程到一個點,的但不是保存user_idgroup_idclient_id添加到UserClient中的同一行表中,它爲每個HABTM創建兩個單獨的行,將user_id,client_id保存到一行,並將group_id,client_id保存到另一行。

有沒有辦法在同一HABTM關聯,以便user_idgroup_idclient_id創建一個新的客戶時得到保存到同一行中定義多個associationForeignKey

回答

1

當您必須將其他字段存儲在HABTM關係中時,使用連接模型有時更容易。在你的情況下,這意味着要爲你的UserClient表創建一個模型,並使用hasMany關係而不是HABTM

當然,您必須手動管理保存,但您將對必須完成的操作有更多的控制。您可以在Cake documentation中找到關於此的幾個字。