saveAll () не сохраняет связанные данные при создании в beforeSave

Ниже приведена ассоциация, вызов сохранения и данные, идущие на сохранение. Он создает запрос UPDATE для Event, но не создается запросов для сохранения связанного 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'
    )
)

person Dave    schedule 02.11.2013    source источник
comment
Единственное, что я вижу, это отсутствие ) для вашего public $hasMany = array( (как закрытие), которое вы показываете ..., это то, что там вместе с другой информацией не опубликовано?   -  person Funk Forty Niner    schedule 02.11.2013
comment
Используете ли вы innodb в качестве механизма хранения?   -  person Barry Chapman    schedule 02.11.2013
comment
@ Fred-ii - это не синтаксическая ошибка - просто не хотел писать здесь все свои ассоциации.   -  person Dave    schedule 02.11.2013
comment
@BarryChapman - я не знаю, но если он даже не пытается выполнить запрос, я не уверен, что это имеет значение.   -  person Dave    schedule 02.11.2013
comment
@ Дэйв Да, у меня были сомнения по этому поводу.   -  person Funk Forty Niner    schedule 02.11.2013
comment
Какие данные вы пытаетесь сохранить? Попробуйте так: $this-›saveAll($data['EventInstance']);   -  person Barry Chapman    schedule 02.11.2013
comment
Cake должен автоматически обрабатывать ассоциацию   -  person Barry Chapman    schedule 02.11.2013
comment
@BarryChapman Попытка сохранить данные события и все его экземпляры EventInstances - да - это ДОЛЖНО обрабатываться автоматически, но это не так.   -  person Dave    schedule 02.11.2013
comment
@Dave Да, вот почему я удалил комментарий.   -  person Funk Forty Niner    schedule 02.11.2013
comment
если ваша таблица базы данных не поддерживает транзакции, она не будет выполняться. Вот почему я спросил вас, используете ли вы InnoDB   -  person Barry Chapman    schedule 02.11.2013
comment
Единственная другая возможность - проблема с вашей ассоциацией   -  person Barry Chapman    schedule 02.11.2013
comment
@BarryChapman - моя ассоциация указана - я не вижу проблемы, но именно поэтому я спрашиваю здесь. Даже когда я просто перечисляю «EventInstance» без каких-либо дополнений, он все равно не сохраняется.   -  person Dave    schedule 02.11.2013


Ответы (1)


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

Итак, я просто изменил свои beforeSave()s на beforeValidate()s, и это работает.

person Dave    schedule 02.11.2013
comment
О Боже! Как ты вообще проследил это?!! Потрачено более часа только на то, чтобы выяснить, что, черт возьми, происходит с моими модифицированными [связанными] данными!! - person Fr0zenFyr; 22.05.2017
comment
Также нашел эту проблему в той же теме. Альтернативным решением было бы делать что-то в связанной модели beforeSave(). Еще одним решением может быть переопределение вашей модели saveAll() в модели, что мне никогда не нравится делать (личное предпочтение). Конечно, есть несколько других решений, таких как использование Cake Events или afterSave(), но это просто излишество. - person Fr0zenFyr; 22.05.2017