CakePHP HABTM保存单个标题记录,链接到多个现有子项

时间:2017-04-21 09:17:25

标签: php mysql cakephp

我正在使用CakePHP 2.9.1,在HABTM关系中有2个表,我想保存标题记录并一次保存很多关联,但是子记录已经存在,我似乎能够保存使用硬编码列表但不使用变量的数据,我确定它有点傻我正在做,我在插件中运行,我想链接的模型也在主要代码。

不得更改子记录,因为它是由主系统处理的,我只是通过在我们的插件中链接它来扩展它的功能。

// Header Record
class templatedoc extends TemplateModuleAppModel
{
    public $useTable = 'templatedocs';
    public $hasAndBelongsToMany = [
        'Servicetemplate' => [
            'className' => 'Servicetemplate',
            'joinTable' => 'templatedocs_to_servicetemplates',
            'foreignKey' => 'templatedoc_id',
            'associationForeignKey' => 'servicetemplate_id',
            'unique' => true,
            'dependent' => false, // We don't want to delete the Service Template by mistake!
        ]

    ];

}

这是我的保存,这有效:

 $this->templatedoc->create ();
            $data = [
                'templatedoc' => [
                    'warning_adjust' => $prioritywarn,
                     'summary' => $summary,
                ],
                'Servicetemplate' => [
                    1,2,3,10    // Dynamic data needed here!
                ]
            ];

            $result = $this->templatedoc->SaveAll ($data);

但我不能拥有" Servicetemplate"硬编码,我已经尝试在该数组中传递一个数组并删除它,将一个数组插入一个逗号分隔的列表,我最终得到的是标题' templatedoc'记录正在创建但我的链接表中没有任何内容

我能想到的唯一不同之处在于,硬编码列表是int值,数据来自数据库,因此将成为字符串中的int,但我不能看出这是一个问题。< / p>

任何想法我做错了什么?对不起,如果它是完全愚蠢的东西。

1 个答案:

答案 0 :(得分:0)

在我的foreach循环中关联时,我最终要做的是存储强制int的项目。

$items[] = (int) $id

然后这工作:

$this->templatedoc->create ();
        $data = [
            'templatedoc' => [
                'warning_adjust' => $prioritywarn,
                'summary' => $summary,
             ],
             'Servicetemplate' => [
                $items   // Dynamic data needed here!
             ]
        ];

       $result = $this->templatedoc->SaveAll ($data);

看起来非常挑剔,它必须是int类型,在这里添加以防其他人被抓出来,很想知道是否有更好的解决方案。