У меня есть относительно простые записи модель с помощью всего пять полей:Cakephp beforeSave не сохраняет новые данные при использовании saveAll?
- Ид
- типа (что типа данных этой записи)
- количества (сколько любого типа он есть)
- блока (блок типа)
- актуальных (datettime, когда эта запись была введена)
- идентификатор_пользователя (идентификатор пользователя, который входит
Итак, ничего необычного. Теперь в одной форме может быть несколько записей (как уже существующих, так и новых), форма расширена через вызовы ajax.
Когда я отправить форму $this->data
выглядит следующим образом:
Array
(
[Entry] => Array
(
[date] => 2011-01-07
[0] => Array
(
[id] => 1
[type] => Eat
[amount] => 1 Steak, one baked potatoe
[unit] => lunch
[time] => Array
(
[hour] => 13
[min] => 31
)
)
[1] => Array
(
[type] => weight
[amount] => 78.5
[unit] => KG
[time] => Array
(
[hour] => 22
[min] => 22
)
)
)
)
Первая запись в $this->data['Entry']['date']
является дата, которая должна использоваться всеми записями. И поскольку также отсутствует user_id, я создал функцию «beforeSave» в модели ввода. Это выглядит следующим образом:
function beforeSave() {
App::import('Component','Session');
$this->Session = new SessionComponent();
if (isset($this->data) && isset($this->data['Entry'])) {
$date = $this->data['Entry']['date'];
unset($this->data['Entry']['date']);
foreach ($this->data['Entry'] as $n => $entry) {
if (is_array($entry)) {
$this->data['Entry'][$n]['date'] = $date . ' ' . $entry['time']['hour'] . ':' . $entry['time']['min'] . ':00';
$this->data['Entry'][$n]['user_id'] = $this->Session->read('Auth.User.id');
}
}
debug($this->data);
}
return true;
}
Я удалить дату, добавить его вместе с записью времени пользователя, тем самым создавая запись DATETIME MySQL и добавить user_id вошедшего в систему пользователя. Прямо, правда. Полученный массив (как выход этой последней debug()
) выглядит следующим образом:
Array
(
[Entry] => Array
(
[0] => Array
(
[id] => 1
[type] => Eat
[amount] => 1 Steak, 1 baked potatoe
[unit] => lunch
[time] => Array
(
[hour] => 09
[min] => 31
)
[date] => 2011-01-07 09:31:00
[user_id] => 2
)
[1] => Array
(
[type] => Weight
[amount] => 78.5
[unit] => KG
[time] => Array
(
[hour] => 22
[min] => 22
)
[date] => 2011-01-07 22:22:00
[user_id] => 2
)
)
)
Так выглядеть точно так, как я хочу, чтобы она выглядела, и это должно быть легко сохранены. Но когда я использую $this->Entry->saveAll($this->data['Entry']
), чтобы сохранить все записи, это не только не работает, но когда я отлаживаю $this->data
непосредственно после saveAll, он выглядит точно так же, как перед функцией saveAll - дата возвращается в массив, записи не записываются введите дату или user_id.
я могу видеть, что BeforeSave называется, я могу видеть, что он меняет $this->data
, но где-то между концом BeforeSave и использования «SaveAll» все мои изменения заблудились и $this->data
это вернулось в исходное состояние. Поэтому спасение не происходит.
Это не сработает, по крайней мере, используя поведение ...: _ ( – elboletaire