我一直在尝试将两个外键保存到连接表的同一行但没有成功。我的Client
模型与User
和Group
模型有两个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_id
,group_id
和client_id
保存到UserClient表中的同一行,而是为每个HABTM创建两个单独的行,{{1 },user_id
保存到一行,client_id
,group_id
保存到另一行。
有没有办法在同一个HABTM关联中定义多个client_id
,以便在创建新客户端时associationForeignKey
,user_id
和group_id
保存到同一行?
答案 0 :(得分:1)
当您必须以HABTM
关系存储其他字段时,有时更容易使用连接模型。在您的情况下,这意味着要为您的UserClient
表创建一个模型,并使用hasMany
关系而不是HABTM
。
当然,您必须手动管理保存,但您可以更好地控制必须执行的操作。您可以在Cake documentation中找到关于此内容的几句话。