私は5つのフィールドを持つ比較的単純なエントリーモデルがあります:saveAllの使用時にCakephpのbeforeSaveに新しいデータが残っていませんか?
- ID(このエントリが何であるか、データ型)
- タイプ
- 量を(どのようにそれが何であれタイプの多く)(
- ユニットタイプのユニット)
- 日付(このエントリが入力されたdatettime)
- USER_ID(
それでは、何も気にしません。単一のフォームは複数のエントリを持つことができます(既に存在するものと新しいものの両方を作成できます)。フォームは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;
}
私は、日付を削除するためのMySQLのdatetimeエントリを作成し、ユーザーのタイムエントリと一緒にそれを追加して、ログインしているユーザーの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']
を使用してすべてのエントリを保存するだけでなく、機能しないだけでなく、saveAllの直後に
$this->data
をデバッグすると、saveAll関数の前に正確に似ています - 日付は配列に戻ります。 dateまたはuser_idエントリがあります。
私はbeforeSaveが呼び出されることがわかります、私はそれが$this->data
を変えることがわかりますが、どこかbeforeSaveの終わりと「SAVEALL」の用法の間に私のすべての変更が失われた取得し、$this->data
は、それが元の状態だと戻っています。したがって節約は行われません。
これは少なくとも動作を使用すると動作しません。:_( – elboletaire