CakePHP - 一个有两个外键的HABTM

时间:2014-01-19 20:04:45

标签: php cakephp model associations has-and-belongs-to-many

我一直在尝试将两个外键保存到连接表的同一行但没有成功。我的Client模型与UserGroup模型有两个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创建两个单独的行,{{1 },user_id保存到一行,client_idgroup_id保存到另一行。

有没有办法在同一个HABTM关联中定义多个client_id,以便在创建新客户端时associationForeignKeyuser_idgroup_id保存到同一行?

1 个答案:

答案 0 :(得分:1)

当您必须以HABTM关系存储其他字段时,有时更容易使用连接模型。在您的情况下,这意味着要为您的UserClient表创建一个模型,并使用hasMany关系而不是HABTM

当然,您必须手动管理保存,但您可以更好地控制必须执行的操作。您可以在Cake documentation中找到关于此内容的几句话。