2009-10-04 17 views
4

Je veux créer un modèle qui a QUELQUES attributs qui ne sont pas stockés dans une base de données. Par exemple, je veux conserver un champ "âge" dans le modèle, mais je ne stocke que des informations d'anniversaire dans la base de données (je peux calculer "âge" une fois que l'information de la DDN a été chargée). J'ai essayé d'ajouter un attribut simple à une extension de modèle, mais autant que je sache, CakePHP l'ignore. Quelle est la bonne façon d'y parvenir? Je suis un novice de CakePHP, alors pardonnez-moi si quelque chose me manque.CakePHP newbie question: Comment ajouter un attribut non-base de données au modèle?

Répondre

9

Je le ferais en utilisant la méthode de rappel afterFind dans le modèle.

+1

+1 Cela semble prometteur. Il suffit de calculer l'âge et de le coller dans une propriété. – timdev

3

Ça fait longtemps que je n'ai pas traité avec Cake, mais pourquoi ne pas simplement implémenter une méthode getAge()?

+0

Je préfère cette solution. C'est explicite et documenté dans un emplacement logique. 'afterFind()' fonctionnerait, bien sûr, mais il cache la logique plus que je ne le voudrais. La disponibilité d'une propriété 'age' semblerait magique aux nouveaux développeurs. –

-1

Utilisez la classe Cache:

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

Cache::read('myOptions'); 
2

Si vous utilisez CakePHP 1.3, vous pouvez utiliser le champ 'virtuel': http://book.cakephp.org/view/1608/Virtual-fields [livre de recettes 3.7.10]

[modifier] Il a également fonctionne dans CakePHP 2.x: http://book.cakephp.org/2.0/en/models/virtual-fields.html

Le principal avantage de cette approche est que le champ virtuel est ajouté dans le modèle. De cette façon, les principes MVC sont respectés.

exemple (MySQL):

var $virtualFields = array(
    'age' => "YEAR(NOW()) - YourModelHere.dob" 
); 
Questions connexes