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,每个 hasMany 有多个 belongsTo 记录?