CakePHP 2.5 habtm 不保存
Posted
技术标签:
【中文标题】CakePHP 2.5 habtm 不保存【英文标题】:CakePHP 2.5 habtm does not save 【发布时间】:2014-10-24 21:43:42 【问题描述】:我知道这个特定问题有很多问题,官方文档中有示例。但我找不到我做错了什么。
我有两个具有 HABTM 关系的模型,但显然它没有在连接和最终表中保存任何内容。这些是我要保存的表格、模型和数组。
表格:
冠军表:
CREATE TABLE `champions` (
`id` int(11) unsigned NOT NULL,
`key` varchar(50) DEFAULT NULL,
.
.
.
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
champions_tags 表:
CREATE TABLE `champions_tags` (
`id` int(11) NOT NULL,
`champion_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
标签表:
CREATE TABLE `tags` (
`id` int(11) NOT NULL,
`type` varchar(50) DEFAULT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
模型:
Champion.php
public $hasAndBelongsToMany = array(
'Tag' => array(
'foreignKey' => 'champion_id',
'associationForeignKey' => 'tag_id',
'unique' => 'keepExisting'
)
);
标签.php
public $hasAndBelongsToMany = array(
'Tag' => array(
'foreignKey' => 'tag_id',
'associationForeignKey' => 'champion_id',
'unique' => 'keepExisting'
)
);
最后,这是我要保存并传播到标签表的信息
Array
(
[Champion] => Array
(
.
.
.
[Tag] => Array
(
[0] => Array
(
[id] => 2660
[type] => Fighter
)
[1] => Array
(
[id] => 2661
[type] => Tank
)
)
)
)
【问题讨论】:
【参考方案1】:在 CakePHP 2.x 中,HABTM 很棘手。了解它的工作原理绝非易事,尤其是在保存数据方面。
对于您的情况,您的数据应如下所示:
<?php
$this->Champion->save([
'Champion' => [
'key' => 'championKey',
],
'Tag' => [
'Tag' => [2660, 2661],
],
]);
如果你想关联一个还不存在的标签怎么办?您必须先创建它,然后将其 id
添加到 $data['Tag']['Tag']
列表中。
你可以同时保存一个英雄并创建一个新标签,但不幸的是它必须一个一个完成:
<?php
$this->Champion->save([
'Champion' => [
'id' => 1,
],
'Tag' => [
'type' => 'new type 1',
]
]);
$this->Champion->save([
'Champion' => [
'id' => 2,
],
'Tag' => [
'type' => 'new type 2',
]
]);
$this->Champion->save([
'Champion' => [
'id' => 2,
],
'Tag' => [
'type' => 'new type 3',
]
]); // /!\ Champion #2 is not tagged with 'new type 2' anymore!
你可以找到所有这些信息in the docs :)
【讨论】:
以上是关于CakePHP 2.5 habtm 不保存的主要内容,如果未能解决你的问题,请参考以下文章
cakephp 在不使用视图的情况下保存 HABTM 关系的数据
CakePHP 我应该在 HABTM 关系中使用 keepExisting 吗?