【问题标题】:saveAll() not saving associated data when created in beforeSavesaveAll() 在 beforeSave 中创建时不保存关联数据
【发布时间】:2013-11-13 08:41:34
【问题描述】:

下面是关联、保存调用和要保存的数据。它为Event 生成UPDATE 查询,但没有生成查询来保存关联的EventInstance

EventInstance 数据是在事件的 beforeSave() 中创建的。

它说它保存得很好 - 没有验证错误..等等。无论如何,我在 EventInstance 模型上没有验证数组。我还检查了,我的表没有任何问题,因为字段不允许 null ......等等。 - 我通过将所有内容设置为允许为空来进行测试。

我不知道 - 这应该如此简单 - 我之前已经完成了 500 次,但是对于这一次,我显然遗漏了一些东西。

// Event model --------------------------
public $hasMany = array(
    'EventInstance' => array(
        'dependent' => true,
        'order'     => 'start ASC',
    ),
    ...

// Save call in Event model -------------
    $this->saveAll($data);

// $data ------------------------- 
'Event' => array(
    'id' => 'xxxxxxxx-65b4-4a75-ba4a-xxxxxxxxxxxx',
    'repeat_type' => '1',
    'repeat_interval' => '2',
    'repeat_weekdays' => 'ns',
    'repeat_on' => '1',
    'repeat_on_weekday' => '',
    'repeat_on_day' => '1',
    'repeat_end' => '',
    'timezone' => 'America/New_York',
    'times' => '',
    'modified' => '2013-11-02 01:07:27',
    'start' => '2013-11-03 01:36:00',
    'end' => '2013-11-10 05:36:00',
    'start_utc' => '2013-11-03 05:36:00',
    'end_utc' => '2013-11-10 10:36:00'
),
'EventInstance' => array(
    (int) 0 => array(
        'start' => '2013-11-05 01:11:00',
        'end' => '2013-11-05 05:36:00'
    ),
    (int) 1 => array(
        'start' => '2013-11-07 01:11:00',
        'end' => '2013-11-07 05:36:00'
    ),
    (int) 2 => array(
        'start' => '2013-11-09 01:11:00',
        'end' => '2013-11-09 05:36:00'
    ),
    (int) 3 => array(
        'start' => '2013-11-11 01:11:00',
        'end' => '2013-11-11 05:36:00'
    )
)

【问题讨论】:

  • 我唯一能看到的是您的public $hasMany = array( 缺少)(作为结束),您正在显示...,这就是其中的内容以及其他未发布的信息吗?跨度>
  • 你在使用innodb作为存储引擎吗?
  • @Fred-ii- 这不是语法错误 - 只是不想在这里写下我所有的关联。
  • @BarryChapman - 我不知道,但如果它甚至不尝试查询,我不确定这是否重要。
  • @Dave 是的,我对此有点怀疑。

标签: php cakephp save associations cakephp-2.4


【解决方案1】:

原来,调用saveAll()时保存关联数据的触发器在beforeSave()添加新的关联数据时已经过去了。

所以 - 我刚刚将我的 beforeSave()s 更改为 beforeValidate()s,它可以正常工作。

【讨论】:

  • 天哪!你是怎么追回来的?!浪费了一个多小时才弄清楚我修改后的 [关联] 数据到底发生了什么!
  • 在同一主题上也找到了this issue。另一种解决方案是在关联模型的beforeSave() 中做一些事情。另一种解决方案可能是在模型中覆盖您的saveAll(),这是我从不喜欢做的事情(个人喜好)。当然还有其他几种解决方案,例如使用Cake EventsafterSave(),但这些都太过分了。
猜你喜欢
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多