Вопрос новичка CakePHP: Как добавить атрибут не из базы данных в модель? - PullRequest
4 голосов
/ 04 октября 2009

Я хочу создать модель, имеющую НЕКОТОРЫЕ атрибуты, которые не хранятся в базе данных. Например, я хочу сохранить поле «возраст» в модели, но я храню информацию о дне рождения только в базе данных (я могу вычислить «возраст» после загрузки информации DOB). Я попытался добавить простой атрибут в расширение модели, но, насколько я могу судить, он игнорируется CakePHP. Как правильно это сделать?

Я новичок в CakePHP, так что прости меня, если я упустил что-то очевидное.

Ответы [ 5 ]

9 голосов
/ 04 октября 2009

Я бы сделал это с помощью метода обратного вызова afterFind в модели.

3 голосов
/ 04 октября 2009

Прошло много времени с тех пор, как я имел дело с Cake, но почему бы просто не реализовать метод getAge ()?

2 голосов
/ 04 октября 2011

Если вы используете CakePHP 1.3, вы можете использовать «виртуальное поле»: http://book.cakephp.org/view/1608/Virtual-fields [Кулинарная книга 3.7.10]

[править] Это также работает в CakePHP 2.x: http://book.cakephp.org/2.0/en/models/virtual-fields.html

Основным преимуществом этого подхода является то, что виртуальное поле добавляется в модель. Таким образом, принципы MVC соблюдаются.

пример (MySQL):

var $virtualFields = array(
    'age' => "YEAR(NOW()) - YourModelHere.dob"
);
0 голосов
/ 09 июля 2012

Есть два способа сделать это с тортом.

  1. Использовать виртуальные поля http://book.cakephp.org/2.0/en/models/virtual-fields.html

  2. Использовать функцию обратного вызова afterFind () http://changelog.in/2012/07/alternative-to-cakephps-virtual-fields-which-is-far-less-restrictive/

0 голосов
/ 10 января 2011

Используйте класс Cache:

$parametrs = array('age'=>21, 'name'=>'aziz');
Cache::write('myOptions', $parameters);

Cache::read('myOptions');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...