尝试在保存时保存 CakePHP HABTM 关系中的重复关联
Posted
技术标签:
【中文标题】尝试在保存时保存 CakePHP HABTM 关系中的重复关联【英文标题】:Trying to save duplicate associations in CakePHP HABTM relationship on save 【发布时间】:2014-08-27 05:23:39 【问题描述】:我也很想知道这个问题的答案 - https://***.com/questions/24447879/cakephp-habtm-i-want-duplicates-at-save
关于 unique = false、saveAll saveAssociated、数组格式,我尝试了一些不同的方法。没运气。
我的具体示例是传递这个数据数组,我在我的 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 行。所以在配置关系时没有问题。它只是不会保存重复项。
任何帮助将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:这是一个复杂的 HABTM 关系
它是alluded to in the docs:
默认情况下,当保存 HasAndBelongsToMany 关系时,CakePHP 将在保存新行之前删除连接表上的所有行。例如,如果您有一个关联了 10 个孩子的俱乐部。然后,您使用 2 个孩子更新 Club。俱乐部只有 2 个孩子,而不是 12 个。
不要为此使用 HABTM,将连接表设为模型
habtm 关系很简单:
Thing <-has and belongs to many-> OtherThing
如果两个模型之间的链接数量有一定的意义,那么几乎可以肯定它是 不是简单的 HABTM 关系,实际上是其他东西,例如
竞争有很多赢家 获胜者属于比赛 获胜者属于用户 获奖者属于奖品 (获胜者有财产位置) 用户有很多奖在这种情况下,将连接表设为模型,将其视为 hasMany 关系,使用 HABTM 操作数据的问题就烟消云散了。
仍然可以在需要和适当的时候使用 HABTM 关系。
【讨论】:
感谢 AD7six,我理解您的意思,并且已经有了一个模型,我将其用于管理方面。我直接通过 AvailableLessonsAvailablePackages 模型进行了测试,可以添加我所追求的场景。我很难弄清楚如何直接从 AvailablePackages 模型中使用 HABTM 模型。我设置为 HABTM 还是 HasMany?在那之后数组结构可能需要看起来像什么。如果你有一个很棒的链接!Do I set up as HABTM or HasMany?
看来您还没有理解答案 =)。我已经改写了它以进一步强调。
谢谢先生。我今晚试试。非常感谢。
雅虎!像魅力一样工作。不得不稍微改变数组结构(对于 hasMany),但很好。谢谢!数据[AvailableLessonsAvailablePackages][][available_lesson_id]
我相信文档所说的不能用来证明使用两个“hasMany”的合理性。但是“hasMany”替代方案确实解决了这个问题。【参考方案2】:
有一个名为 availablelessons_availablepackages 的单独表,您需要使用外键和关联外键为 AvailableLesson 和 AvailablePackage 模型定义 HABTM,然后您可以保存。所有保存的数据都将在 availablelessons_availablepackages 表中。
【讨论】:
FMQB,我也玩过这个选项。我认为在这种情况下,HABATM 的工作是有意义的。但是,一旦通过我的系统预订了 AvailablePackage,你的理论就会更有效,将其变成带有课程关联的 Package。以上是关于尝试在保存时保存 CakePHP HABTM 关系中的重复关联的主要内容,如果未能解决你的问题,请参考以下文章
在 HABTM 的情况下,CakePHP 不会保存正确的数据