1

説明/説明:

「イベントの追加」ページでは、複数のスケジュールを追加できます。saveAll() を実行すると、イベント データとすべてのスケジュール データが保存されます。これは正しく機能しています。

しかし、スケジュールデータを処理し、「日付」テーブルに個々の行を作成したいと考えています。

Event hasMany Schedule
Schedule belongsTo Event
Schedule hasMany Date
Date belongsTo Schedule

そのため、日付モデルをロードし、渡された各スケジュールを繰り返し、日付を処理/挿入しています (繰り返し、開始日などに基づいて)。

私の問題/質問:

日付 ("schedule_id" フィールド) の各スケジュールの ID が必要です。繰り返し中に個々のスケジュールの ID を取得するにはどうすればよいですか? 現在、私はこれをやっています:

foreach($this->data['Schedule'] as $i => $value) {
    $this->data['Date']['schedule_id'] = $this->Event->Schedule->id;
    //other stuff here
    $this->Date->saveAll($this->data['Date']);
}

しかし、それは私にすべてのループで同じIDを与えます.

4

1 に答える 1

1

問題は、$this->Event->Schedule->id挿入の LAST ID のみを保持することです。これが、常に同じ ID を取得する理由です。

イベントコントローラーの追加機能内でこの foreach ループを実行していると思います。それぞれ独自の挿入 ID が必要な場合は、Event で saveAll を実行するのではなく、(既に行っているように) 各スケジュールをループしてそこにスケジュールを保存する必要があります。これは次のようになります。

foreach ($this->data['Schedule'] as $schedule) {
    $schedule['event_id'] = $this->Event->id; //this is needed because we don't do a saveAll on the Event anymore
    $this->Event->Schedule->save($schedule);

    //Here comes your part
    $this->data['Date']['schedule_id'] = $this->Event->Schedule->id;
    //other stuff here
    $this->Event->Schedule->Date->saveAll($this->data['Date']);
}

お役に立てれば!

于 2011-05-11T09:34:51.597 に答える