CakePHP - Поведения / Поведения - Советы по созданию пользовательского поведения
Я прочитал о поведении и подумал, что это может соответствовать моим простым требованиям, но я не знаю, как начать с точки зрения создания собственного поведения.
Сценарий: у меня есть мастер- таблица под названием " Компании". Эта таблица имеет отношение hasMany к таблицам сведенийBusinessDescription and Addresses. Разумеется, эти подробные таблицы связаны с таблицей компаний внешним ключом.
Несмотря на отношение hasMany, только одна запись в этих таблицах подробностей может быть действительной в любой конкретный день. Следовательно, в подробных таблицах для BusinessDescription and Addresses у меня есть поля "Startdate" и "Enddate", которые сообщают вам, для какого периода времени записи действительны.
Пример использования: Компания X будет иметь новый адрес с 01.01.2015. Следовательно, при вставке нового адреса его старая адресная запись, которая действительна с Начальной даты 01.01.2014 до Конечной даты 31.12.9999, должна изменить свою Конечную дату на 31.12.2014, чтобы освободить место для новой записи, которая начинается с 01.01.2015.
Все это "автоматическое разделение / корректировка" дат начала / окончания существующих записей я бы хотел описать, однако, учебники по настройке и запуску пользовательского поведения трудно найти.
Может ли кто-нибудь указать мне, как начать, или, может быть, показать мне скелетную структуру создания поведения для этого?
1 ответ
Я не вижу необходимости в поведении в этом. Поведения предназначены для случаев, когда вам нужно использовать логику в нескольких моделях - в этом случае, кажется, вам нужна только одна модель.
Вы можете просто использовать beforeFind()
обратный звонок в вашем Company
модель. Таким образом, вы можете добавить условия для дат, которые вы хотите ограничить.
Если вы действительно хотите вести себя так, вы можете beforeFind()
в один и использовать его в любое время, когда вы хотите, чтобы указанная модель ограничивалась на основе текущей даты... и т. д.
Кстати, почему бы просто не получить самый последний адрес этой компании? Заказ по дате DESC, а лимит 1?