尝试在保存时保存CakePHP HABTM关系中的重复关联

时间:2014-08-27 05:23:39

标签: cakephp has-and-belongs-to-many

我很想知道这个问题的答案 - https://stackoverflow.com/questions/24447879/cakephp-habtm-i-want-duplicates-at-save

我在unique = false,saveAll saveAssocaited,数组格式方面尝试了一些不同的东西。没运气。

我的具体示例是传递这个数据数组,我在我的AvailablePackageController中使用saveAll:

'AvailablePackage' => array(
    'title' => 'Tester',
    'description' => 'Tester description',
    'price' => '500.00',
    'image' => array(
        'name' => '',
        'type' => '',
        'tmp_name' => '',
        'error' => (int) 4,
        'size' => (int) 0
    )
),
'AvailableLesson' => array(
    'AvailableLesson' => array(
        (int) 0 => '23',
        (int) 1 => '23',
        (int) 2 => '23',
        (int) 3 => '9',
        (int) 4 => '9'
    )
)

正如您所看到的,我希望此可用套餐能够获得可用课程' 23'相关3次。在一个包中,您可以将相同的课程重复3次(在这种情况下)。

HABTM设置正确,一切正常。在上面它节省了2行一个23和一个9。所以在配置关系时没有问题。它只是不会保存重复项。

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:0)

这是一个复杂的HABTM关系

它是alluded to in the docs

  

默认情况下,保存HasAndBelongsToMany关系时,CakePHP将删除连接表上的所有行,然后再保存新的行。例如,如果您有一个有10个孩子关联的俱乐部。然后,您将与2名儿童一起更新俱乐部。俱乐部只有2个孩子,而不是12个。

不要使用HABTM,使连接表成为模型

habtm关系很简单:

Thing <-has and belongs to many-> OtherThing

如果两个模型之间的链接数量有一定的意义,那几乎可以肯定 不是一个简单的HABTM关系,实际上是其他的东西,例如。

  • 竞赛有很多赢家
  • 获奖者所属竞赛
  • Winner belongsTo User
  • Winner belongsTo Prize
  • (Winner有财产位置)
  • 用户获得多个奖品

在这种情况下,将连接表作为模型,将其视为hasMany关系,并使用HABTM操作数据的问题蒸发。

在需要和适当的情况下,仍然可以使用HABTM关系。

答案 1 :(得分:0)

将存在一个名为availablelessons_availablepackages的单独表,您需要使用foreignkey和associatedforeignkey为AvailableLesson和AvailablePackage模型定义HABTM,然后您可以保存。所有保存的数据都将在availablelessons_availablepackages表中。