如何使用关联编辑多个记录?

时间:2011-04-15 11:55:10

标签: cakephp

我有4张桌子: - 专辑 - 图片 - 标签 - images_tags(id,image_id,tag_id)

我想编辑多条记录。一切正常,直到我添加标签表。 现在我的$ this->数据看起来像这样:(124是图像ID)

Array(
     [124] => Array(
           [Image] => Array
           (
                 [id] => 124
                 ...
           )

           [Album] => Array
           (
                 [id] => 2
                 ...
           )

           [Tag] => Array
           (
                  [0] => Array
                  (
                       [id] => 2
                       ....
                  )
           )
      [125] => Array( ...
)

这是我的视图编辑文件:

<?php foreach($this->data as $key => $value) {

echo $this->Form->input('Image.'.$key.'.id');
echo $this->Form->input('Image.'.$key.'.title');
echo $this->Form->input('Image.'.$key.'.Tag'); // multi select for tags
...

在图像控制器中编辑动作:

$result = $this->Image->find('all', array(
        'conditions' => array('Image.id' => $img_ids))
);

$this->data['Image'] = Set::combine($result, '{n}.Image.id', '{n}');

我不知道如何使用多个编辑表单绑定$ this-&gt;数据数组。以前我只有图像数据:

 Array(
         [124] => Array(
                  [id] => 2,
                  ...
         ),
         [125] => Array(
                  ...
  );

但现在我还需要有关标签的信息。我正在使用saveAll()函数。

1 个答案:

答案 0 :(得分:0)

您需要转换[Tag]索引。保存hasAndBelongsToMany的正确格式是[Tag] [Tag] =&gt;阵列(ID1,ID2,ID3,...)。例如:

Array(
 [124] => Array(
       [Image] => Array
       (
             [id] => 124
             ...
       )

       [Album] => Array
       (
             [id] => 2
             ...
       )

       [Tag] => Array
       (
              [Tag] => Array
              (
                  [0] => 2,
                  [1] => 16,
                  ...
              )
       )
  [125] => Array( ...
)

其中2和16是相关标签的ID。