【问题标题】:CakePHP - One HABTM With Two Foreign KeysCakePHP - 一个带有两个外键的 HABTM
【发布时间】:2014-01-19 20:04:44
【问题描述】:

我一直在尝试将两个外键保存到连接表的同一行,但没有成功。我的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 创建两个单独的行,user_idclient_id 得到保存到一行,group_idclient_id 被保存到另一行。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 2011-07-12
      相关资源
      最近更新 更多