Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 530

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/cache.php on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/theme.php on line 623
Модели - Программируем на CakePHP


Дек 10 2008

Мягкое удаление с помощью Soft Delete Behavior

Раздел: МоделиМета @ 23:29

С помощью этого компонента вы можете использовать в своих проектах «мягкое удаление» - т.е. установку флага для пометки удаленных записей, вместо реального их удаления. Зачем это нужно? Например, для хранения предыдущих версий отредактированных записей на блоге, для сохранения архива старых товаров в магазине — применений масса. Я стараюсь во всех своих проектах использовать «мягкое удаление» даже просто для того чтобы исключить ошибку случайного удаления. Заказчики часто обращаются: «ой, а мы удалили, а потом передумали, а можно восстановить?».

Внимание! Я еще не тестировал этот компонент с CakePHP 1.2 RC3. Судя по отзывам в комментариях к компоненту, есть проблемы с совместимостью. Эта запись — перевод документации, в следующей я опишу возможные проблемы и пути их решения.

Читать дальше “Мягкое удаление с помощью Soft Delete Behavior”

Теги: , , ,


Дек 09 2008

Выносите максимум логики в модели

Раздел: МоделиМета @ 08:36

Просмотрите код ваших контроллеров. Если часто встречаются конструкции типа

$this->Product->recursive = -1;
$hits = $this->Product->find('all',array('conditions'=>'Product.image <> "no_image"','order'=>'Product.hit DESC, Product.added DESC','limit'=>9));

то задумайтесь — а место ли им в контроллере?

В чем идея модели? Предоставлять интерфейс к данным. Т.е. Модель должна вернуть уже готовые к отображению данные, в контроллере — только связь с внешним видом. Весь выше приведенный код стоило бы заменить методом в модели, например getHits($num). Тогда вызов в контроллере упростился бы до:

$hits = $this->Product->getHits(9);

Логично?

Этот принцип называется «толстые модели, худые контроллеры», он рекомендует переносить максимально возможную часть логики (естественно, логики поиска данных) приложения в модель.

Теги: , ,


Дек 04 2008

И снова про основы

Раздел: МоделиМета @ 12:32

Попробую для новичков более подробно описать особенности взаимодействия частей приложения на CakePHP.

Первая основополагающая идея заложена в понятии «Модель». Что такое модель? Это объектно-ориентированное представление данных внутри приложения, с интуитивно-понятным интерфейсом. Под интерфейсом тут надо понимать не внешний вид, а именно способ взаимодействия с другими объектами приложения.

Чтобы было проще понять, приведу пример.

Читать дальше “И снова про основы”

Теги: , ,


Сен 27 2008

Добавление и удаление ассоциаций между записями

Раздел: МоделиМета @ 21:53

Во многих приложениях используются связи типа многие-ко-многим - HasAndBelongsToMany или HABTM в терминологии CakePHP. Они нужны для создания меток к записям в блоге, привязки атрибутов к товарам в интернет магазине, пользователей к пользователям в социальных сетях и т.д.

Для создания связи HABTM в CakePHP используется вспомогательная таблица, в которой хранятся два идентификатора связываемых данных. Например, если нам надо связать таблицы posts и tags, то вспомогательная таблица будет иметь вид:

Читать дальше “Добавление и удаление ассоциаций между записями”

Теги: , , , , ,