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?

Другие вопросы по тегам