CakePHP после сохранения времени - PullRequest
3 голосов
/ 30 августа 2011

У меня есть ситуация, когда при обратном вызове afterSave модели я пытаюсь получить доступ к данным из удаленной ассоциации (это устаревшая модель данных с очень сомнительной связью ассоциации).Что я нахожу, так это то, что в рамках обратного вызова я могу выполнить вызов find для модели, но если я выйду правильно, запись никогда не будет вставлена ​​в базу данных.Отсутствие записи означает, что я не могу выполнить поиск по связанной модели, используя данные, которые были только что вставлены в текущую.

Я не нашел упоминаний о том, когда данные фактически передаются в отношениикогда afterSave обратный вызов включен.Я работаю с устаревшим кодом, но не вижу признаков того, что мы специально проводим транзакции, поэтому я пытаюсь выяснить, какие у меня могут быть варианты.

Спасибо.

ОБНОВЛЕНИЕ

Суть сценария такова: мы проводим регистрацию событий, но люди могут ждать в списке.Пользователь может зарегистрироваться (или быть зарегистрированным) для данного Date.После завершения регистрации мне нужно проверить список ожидания на наличие записи для регистрируемого пользователя (WaitList.user_id) на дату регистрации для (WaitList.date_id).Если такая запись существует, ее можно удалить, потому что она стала активной регистрацией.

Устаревшая схема ставит меня в такое место, где регистрация не связана напрямую с датой, поэтому я не могу получить Date.id легко.Вместо этого Registration->Registrant->Ticket->Date.Я знаю, что это не интуитивно понятно, но сейчас это так.Даже лучше (включая сарказм), у нас есть представление с именем attendees, которое сворачивает всю эту информацию и из которого я мог бы использовать вновь созданный Registration->id для возврата Attendee.date_id.Поскольку запись не существует, она не доступна в представлении.

Надеюсь, это обеспечит немного больше контекста.

1 Ответ

0 голосов
/ 30 августа 2011

Какова цель запроса поиска внутри вашего afterSave?

Обновление

Можно ли вообще правильно связать записи? Или мы говорим о слишком большом количестве рефакторинга, чтобы оно того стоило? Вы можете перенести чек на контроллер, если невозможно изменить связи между записями.

Что-то вроде (в коде psuedo)

if (save->isSuccessful) {
    if (onWaitList) {
        // delete record
    }
}

Это не лучшая практика, но она поможет вам решить вашу проблему.

...