首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP 3回调系统及相关实体

CakePHP 3回调系统及相关实体
EN

Stack Overflow用户
提问于 2016-06-13 12:36:43
回答 1查看 288关注 0票数 1

使用CakePHP 3,我有两个模型:铭文和测试:

代码语言:javascript
复制
Inscriptions hasMany Tests

我在InscriptionsTable中有一个InscriptionsTable()回调,在这里我为新的题词创建了测试:

代码语言:javascript
复制
public function afterSave($event, $inscription, $options) {

  // find out which tests I need to create (based on Inscription fields)
  $tests = ...;

  foreach($tests as $t) {

    $test = $testTable->newEntity([
      ...
      'inscription_id' => $inscription->id
    ]);

    $testTable->save($test)

  }
}

...so在保存铭文时,也会创建所有所需的相关测试,并参考铭文。

它运行良好,但现在我注意到,当我保存一个新的题词时,afterSave回调会被多次触发。它似乎为铭文实体触发了一次,为创建的每个测试再次触发了一次,就像行

代码语言:javascript
复制
$testTable->save($test)

...triggers InscriptionsTable::afterSave()回调。

我尝试添加‘回调’=> FALSE作为保存()的第二个参数(就像在CakePHP 2中一样),没有什么改变。

这里会发生什么事?

谢谢

编辑

Konstantinos Daskalopoulos回答是正确的(并接受),对http://book.cakephp.org/3.0/en/orm/saving-data.html#saving-entities的完整解释,第6点。在列表中“当一个实体被保存时会发生一些事情”("6.保存父母关联“)。所以我想这解释了我所看到的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-13 12:58:05

我能想到这样的情景:

  • 当您执行$testTable->save($test)时,关联(测试)是针对铭文保存的,所以在行$testTable->$test后面调用$碑文->save($test)。在本例中,您可以尝试使用->update()代替->save(),因为update不会触发afterSave事件。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37790034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档