2011-02-27 2 views
1

Только что начали посещать CakePHP с пары недель назад. У меня есть некоторый опыт работы с MVC-фреймворками, но эта проблема немного меня отпугивает.Представляющие версии объектов с CakePHP

Я в настоящее время работаю над моделью foo, содержащей первичный идентификатор и некоторые атрибуты. Поскольку необходима полная история изменений foo, содержимое foo сохраняется в таблице foo_content. Эти две таблицы подключены через foo_content.foo_id = foo.id, в Торт с foo hasMany foo_content -связью.

Для отслеживания версий foo, foo_content также содержит столбец version и само поле currentVersionfoo. Версия - это число, увеличенное на единицу каждый раз, когда пользователь обновляет foo. Это более старое родное PHP-приложение btw, которое будет переписано поверх Cake. В 9 раз из 10 в приложении самая последняя версия (foo.currentVersion) - это db-запись, которая должна быть представлена ​​в интерфейсе.

Мой вопрос просто: есть ли какое-то представление об этом непосредственно в модели? Или эта логика просто должна быть определена в контроллере?

Очень благодарен за помощь!

ответ

2

Для всегда автоматически получать последнюю версию, вы можете легко сделать еще одну ассоциацию:

public $hasOne = array(
    'CurrentContent' => array(
     … 
     'condition' => array('FooContent.version' => 'Foo.currentVersion') 
    ) 
) 

Это, или добавить пункт 'order' => array('FooContent.version' => 'desc') к вашим hasMany отношениям и всегда работают с $foo['FooContent'][0].

Для автоматического создания архивных версий вы можете работать с beforeSave и/или afterSave обратными вызовами.

Смежные вопросы