Получение идентификаторов нескольких вставленных элементов hasMany в CakePHP - PullRequest
1 голос
/ 11 мая 2011

Описание / объяснение:

На странице «Добавить событие» вы можете добавить несколько расписаний. Когда вы сохраняете All (), он сохраняет данные о событии и все данные о расписании - это работает правильно.

Но ТОГДА я хочу обработать данные расписания и построить отдельные строки в таблице «даты».

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

Итак - я загружаю модель Date, повторяю все переданные расписания и обрабатываю / вставляю даты (на основе повторения, даты начала ... и т. Д.).

Моя проблема / Вопрос:

Мне нужен идентификатор каждого расписания для его Даты (поле «schedule_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']);
}

Но это дает мне один и тот же идентификатор в каждом цикле.

1 Ответ

1 голос
/ 11 мая 2011

Проблема в том, что $this->Event->Schedule->id содержит только последний идентификатор вставки. Вот почему вы всегда получаете один и тот же идентификатор.

Полагаю, вы выполняете этот цикл foreach в своей функции добавления вашего контроллера событий. Если вам нужен каждый собственный идентификатор вставки, вы не должны делать 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']);
}

Надеюсь, это поможет!

...