CakePHP - 如何在保存时将关联记录添加到模型中?

Posted

技术标签:

【中文标题】CakePHP - 如何在保存时将关联记录添加到模型中?【英文标题】:CakePHP - How to add associated records to a model on save? 【发布时间】:2013-09-03 21:04:26 【问题描述】:

我正在使用 Cakephp 2.3,并且正在尝试找到执行关联数据保存的正确方法。 我已经设置了一个保存图片数据的图像上传表单,但同时我还想处理保存的图像,以便在保存时我的应用程序应该检查文件并提取所有 exif 数据并将该标签添加为关联的模型标签。

我的关系是

Picture hasMany Tags
Tag belongsTo Picture

现在我正在尝试使用 Picture beforeSave 回调以编程方式将新记录添加到数据数组中,但它不起作用(它没有保存添加的数据)。

图片控制器

$this->Picture->create();           
$this->Picture->saveAll($this->request->data);

beforeSave后的数据数组

Array
(
    [Picture] => Array
        (
            [field1] => foo
            [field2] => bar
        )

    [Tag] => Array
        (
            [0] => Array
                (
                    [tag] => example
                    [value] => example
                )

            [1] => Array
                (
                    [tag] => example 2
                    [value] => example 2
                )
         )
)

如何在不过多使用控制器的情况下实现我想要的效果?我想要我的生意 逻辑主要停留在模型上。

【问题讨论】:

【参考方案1】:

您需要使用 deep 来实现这一点。根据食谱:

使用 $options['deep'] = true 保存相关数据(从 2.1 开始)

例子

$Model->saveMany($data, array('deep' => true));
$Model->saveAssociated($data, array('deep' => true));

查看cookbook了解更多详情

【讨论】:

我刚刚尝试过,但它不起作用。你的意思是在控制器中,对吧?或者我应该在 beforeSave 回调中调用 save* 方法? 是的,你在控制器上调用 save 方法..检查这个例子book.cakephp.org/2.0/en/models/… 即使这样,我在 beforeSave 中“注入”的新关联数据也不会被保存。 你在哪里注入数据?您不能修改 $this->request->data ...您需要创建该数组的副本然后注入 在保存前。在那个回调中,我可以访问$this->data。我在我的问题示例代码中将 Tag 键添加到数组中。

以上是关于CakePHP - 如何在保存时将关联记录添加到模型中?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 模型关联 HasMany - 保存错误

CakePHP - 如何一次通过记录保存单个 hasMany,每个 hasMany 有多个 belongsTo 记录?

cakephp 3.0 - 保存独特的关联

在 CakePHP 中保存时如何验证关联模型是不是存在

CakePHP 3如何使用REST以正确的方式保存相关关联1:N?

CakePHP 使用 saveAll:如何使用 HABTM 链接记录保存额外数据?