CakePHP hasAndBelongsToMany复选框矩阵

CakePHP hasAndBelongsToMany复选框矩阵,php,cakephp,checkbox,has-and-belongs-to-many,Php,Cakephp,Checkbox,Has And Belongs To Many,我有两种型号,组件和组。一个组有许多组件s,一个组件可以在许多组s中。现在,我需要的是一个视图,其中有一个表,ntimesm复选框字段(或矩阵)。列将是所有组s(更少),行将代表组件。基本上,当HaBTM关系存在时,复选框被选中 这应该是可编辑的,这意味着它将被包装在一个表单中 | Group 1 | Group 2 | Group 3 C1 | x | | x C2 | x | x | C3 |

我有两种型号,
组件
。一个
有许多
组件
s,一个
组件
可以在许多
s中。现在,我需要的是一个视图,其中有一个表,
n
times
m
复选框字段(或矩阵)。列将是所有
s(更少),行将代表
组件
。基本上,当HaBTM关系存在时,复选框被选中

这应该是可编辑的,这意味着它将被包装在一个表单中

      | Group 1 | Group 2 | Group 3
 C1   |    x    |         |   x
 C2   |    x    |    x    |
 C3   |         |         |   x
在CakePHP中,实现这一点最轻松的方法是什么?

好的。 当然,首先要从连接表中加载数据。所以你会得到很多数据集,比如:

id => 4
component_id => 4
group_id =>3 
然后,您将拥有一个包含所有现有组件的数组和另一个包含所有现有组的数组

因为组件在行中,所以我会重新组织这个数组,这样就有了一个多维数组,作为第一个键,它有组件id,在这个id下有一个数组,包含所有数据集的数组,其中包含这个组

e、 g:

重新组织后,您可以将其传递到视图,在视图中可以迭代以构建表单,为每个复选框提供组件组信息,您可以在发送表单后收集这些信息

比这更好的(作为版本1.2)是AJAX调用,它在激活或停用复选框后立即保存组合。你的选择;)


灾难简

我尝试了一些silimar,但不得不意识到,这不会删除旧条目,只会确保可以添加新条目。我想没有捷径可以做到这一点——删除旧条目并逐个遍历矩阵。我的应用程序中有一个类似的问题,我所做的是在我的模型中编写一个方法来做到这一点:在我的连接模型中编写一个方法来做到这一点:它首先保存新的连接,然后删除已连接的连接解散。如果你感兴趣,我可以在这里粘贴代码。
array(
1 => array(
    0 => array(
    'id' => 4,
    'component_id' => 1,
    'group_id' => 2,
    ),
    1 => array(
    'id' => 4,
    'component_id' => 1,
    'group_id' => 5,
    ),
    ),
2 => array(
    0 => array(
    'id' => 4,
    'component_id' => 2,
    'group_id' => 1,
    ),
    1 => array(
    'id' => 4,
    'component_id' => 2,
    'group_id' => 3,
    ),
    ),
);