2013-11-02 3 views
1

Ниже приведена ассоциация, вызов сохранения и данные, которые будут сохранены. Он генерирует запрос UPDATE для Event, но нет запросов, сгенерированных для сохранения связанных EventInstance.saveAll() не сохраняет связанные данные при создании в beforeSave

Данные EventInstance создаются в событии beforeSave().

В нем говорится, что он экономит штраф - никаких ошибок проверки..вт. И в любом случае у меня нет массива проверки в модели EventInstance. Я также проверил, и моя таблица не имеет никаких проблем, поскольку поля не допускают null ... и т. Д. - Я протестировал, установив все так же, как и 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' 
    ) 
) 
+0

Единственное, что я вижу, это отсутствие ')' для вашего 'public $ hasMany = array (' (как закрытие), которое вы показываете '...', это то, что там вместе с другой информацией, не размещенной? –

+0

Вы используете innodb как механизм хранения? –

+0

@ Fred-ii- это не синтаксическая ошибка - просто не хотелось писать все мои ассоциации здесь. – Dave

ответ

3

Оказывается, триггер для сохранения связанных данных при вызове saveAll() уже прошло к тому времени beforeSave() добавляет новые связанные с ним данные.

Итак - я только что сменил beforeSave() с на beforeValidate(), и он работает.

+0

Господи! Как ты даже проследил это? !! Потрачено в течение часа, чтобы выяснить, что f *** происходило с моими измененными [связанными] данными !! – Fr0zenFyr

+0

Также найден [этот номер] (https://github.com/cakephp/cakephp/issues/1765) на эту же тему. Альтернативным решением было бы сделать материал в 'beforeSave()' связанной модели. Еще одно решение может заключаться в том, чтобы переопределить ваш 'saveAll()' в модели, что мне никогда не нравится делать (личное предпочтение). Конечно, есть несколько других решений, таких как использование 'Cake Events' или' afterSave() ', но это просто избыток. – Fr0zenFyr

Смежные вопросы