Cakephp 更新关联的输入会创建重复的记录

Cakephp updating associated inputs creates duplicated records

我有两个表是相关策略和strategy_conditions。策略可以有很多strategy_conditions.

我已经用一些 javascript 更新了策略 add.php 以便我可以将 strategy_conditions 添加到同一页面等。一切都很好。

我希望能够在策略上同时编辑 strategies_conditions edit.php 我可以循环并添加正确的关联 strategies_conditions 输入及其值但是我的问题是,它不是更新 strategies_conditions,而是创建新记录。奇怪,因为 cakephp 识别细节,因为它在输入中有正确的值。

这是策略edit.php模板中的cakephp代码

<?php foreach ($strategy->strategies_conditions as $key=>$strategiesConditions) : ?>
     <tr>
         <td>
             <?php echo $this->Form->control('strategies_conditions.'.$key.'.name', array( 'label' => false )); ?>
          </td>
    </tr>
<?php endforeach; ?> 

如果您想编辑关联记录,那么您必须还提供这些记录的主键。

父实体不一定需要主键,因为它通常在URL(即/strategies/edit/1)中传递,并用于获取正在修补的父实体表单数据。

然而,对于关联记录,其他任何地方都没有此类数据,因此您需要将其与记录的其余数据一起显式传递,以便编组器可以识别和修补现有的 entities/records,否则你最终会得到没有主键的新实体,例如新记录。

假设主键是id:

echo $this->Form->hidden('strategies_conditions.' . $key . '.id');
echo $this->Form->control('strategies_conditions.' . $key . '.name', array(
    'label' => false
));

另见