Les attributs de Model vous permettent de configurer les propriétés qui peuvent surcharger le behavior du model par défaut.
Pour une liste complète d'attributs du model et ses descriptions, visitez l'API de CakePHP. Allez voir http://api20.cakephp.org/class/model.
La propriété useDbConfig
est une chaîne de caractère qui spécifie le nom
de la connection à la base de données à utiliser pour lier votre classe model
à la table de la base de données liée. Vous pouvez la configurer
pour n'importe quelles connexions de base de données définies dans votre
fichier de configuration database. Le fichier de configuration database
est placé dans /app/Config/database.php.
La propriété useDbConfig
est par défaut la connection à la base de
données 'default'.
Exemple d'utilisation:
class Exemple extends AppModel { public $useDbConfig = 'alternate'; }
La propriété useTable
spécifie le nom de la table de la base de données.
Par défaut, le model utilise le nom de classe du model en minuscule, au
pluriel. Configurez cette attribut du nom d'une table alternative ou
définissez le à false
si vous souhaitez que le model n'utilise aucune table
de la base de données.
Exemple d'utilisation:
class Exemple extends AppModel { public $useTable = false; // Ce model n'utilise pas une table de la base de données }
Alternative:
class Exemple extends AppModel { public $useTable = 'exmp'; // Ce model utilise une table 'exmp' de la base de données }
Le nom du préfixe de la table utilisé pour le model. Le préfixe de la table
est initialement configuré dans le fichier de connection à la base de données
dans /app/Config/database.php. Par défaut il n'y a pas de prefix. Vous pouvez
écraser la valeur par défaut en configurant l'attribut tablePrefix
dans le
model.
Exemple d'utilisation:
class Example extends AppModel { public $tablePrefix = 'alternate_'; // va regarder 'alternate_examples' }
Chaque table a normalement une clé primaire, id
. Vous pouvez changer
le nom du champ que le model utlilise en clé primaire. Ceci est courant
quand on configure CakePHP pour utiliser une table d'une base de données
existante.
Exemple d'utilisation:
class Example extends AppModel { public $primaryKey = 'example_id'; // example_id est le nom du champ dans la base de données }
L'attribut displayField
spécifie le champ de la base de données qui doit
être utilisé comme label pour un enregistrement. Le label est utilisé
dans le scaffolding et dans les appels avec find('list')
. Le model va
utiliser name
ou title
, par défaut.
Par exemple, pour utiliser le champ username
:
class User extends AppModel { public $displayField = 'username'; }
Les noms de champ multiple ne peuvent pas être combinés en un champ
unique d'affichage. Par exemple, vous ne pouvez pas spécifier
array('first_name', 'last_name')
en champ à afficher. A la place,
créez un champ virtuel avec l'attribut de Model virtualFields
La propriété recursive définit la profondeur à laquelle CakePHP doit aller
attraper les models de données associés via les méthodes find()
,
findAll()
et read()
.
Imaginez que votre application dispose de Groups qui appartiennent à un Domain et ont plusieurs (many) Users qui à leur tour ont plusieurs (many) Articles. vous pouvez définir $recursive à différentes valeurs basées sur la quantité de données que vous souhaitez retourner à partir d'un appel $this->Group->find():
- -1 CakePHP récupère seulement les données de Group, pas de jointures.
- 0 CakePHP récupère les données de Group et leur Domain.
- 1 CakePHP récupère Group, son domaine et ses Users associés.
- 2 CakePHP récupère un Group, son domain, ses Users associés, et les Articles associés des Users.
Ne le définissez pas à plus que vous n'avez besoin. Faire que CakePHP récupère des données dont vous n'aurez pas besoin va ralentir votre application inutilement. Notez aussi que par défaut le niveau de recursive est 1.
Note
Si vous voulez combiner $recursive avec la fonctionnalité fields
,
vous devrez ajouter les colonnes contenant les clés étrangères nécessaires
au tableau fields
manuellement. Dans l'exemple ci-dessus, ceci
pourrait signifier d'ajouter domain_id
.
Tip
Le niveau de recursive recommandé pour votre application devrait être -1. Cela évite de récupérer des données liés dans les cas où ce n'est pas nécessaire ou même non souhaité. C'est le plus souvent le cas pour la plupart de vos appels find(). Augmenter le seulement quand cela est souhaité ou utilisez le behavior Containable.
Vous pouvez réaliser cela en l'ajoutant à AppModel:
public $recursive = -1;
L'ordre par défaut des données pour toute opération de type find. Les valeurs possibles incluent:
$order = "field" $order = "Model.field"; $order = "Model.field asc"; $order = "Model.field ASC"; $order = "Model.field DESC"; $order = array("Model.field" => "asc", "Model.field2" => "DESC");
Le contenu pour les données attrapées pour le model. Alors que les données retournées d'une classe de model sont normalement utilisées à partir d'un appel de find(), vous pourriez avoir besoin d'accéder aux informations stockées dans $data à l'intérieur des callbacks du model.
Contient les metadata décrivant les champs de la table de la base de données du model. Chaque champ est décrit par:
- name
- type (integer, string, datetime, etc.)
- null
- default value
- length
Exemple d'utilisation:
public $_schema = array( 'first_name' => array( 'type' => 'string', 'length' => 30 ), 'last_name' => array( 'type' => 'string', 'length' => 30 ), 'email' => array( 'type' => 'string', 'length' => 30 ), 'message' => array('type' => 'text') );
Cet attribut maintient les règles qui permettent au model de faire des décisions de validation de données avant la sauvegarde. Les clés nommées selon les champs maintient les valeurs regex autorisant le model à essayer de faire des correspondances.
Note
Il n'est pas nécessaire d'appeler validate() avant save() puisque save() va automatiquement valider vos données avant d'effectivement les sauvegarder.
Pour plus d'informations sur la validation, regardez la section suivante :doc:`/models/data-validation` du manuel.
Tableau de champs virtuels que le model a. Les champs virtuels sont des alias des expressions SQL. Les champs ajoutés à cette propriété vont être lus comme d'autres champs dans un model mais ne seront pas sauvegardables.
Exemple d'utilisation pour MySQL:
public $virtualFields = array( 'name' => "CONCAT(User.first_name, ' ', User.last_name)" );
Dans les opérations ultérieures de find, vos résultats de User contiendront
une clé name
avec le résultat de la concaténation. Il n'est pas conseillé
de créer des champs virtuels avec les mêmes noms comme colonnes dans la base de
données, ceci peut causer des erreurs SQL.
Pour plus d'informations sur la propriété virtualFields
, son usage propre,
ainsi que des limitations, regardez :doc:`/models/virtual-fields`.
Nom du model. Si vous ne le spécifiez pas dans votre fichier model, il sera défini automatiquement selon le nom de la classe par le constructeur.
Exemple d'utilisation:
class Exemple extends AppModel { public $name = 'Exemple'; }
Si définie à true, les données récupérées par le model pendant une requête unique sont mises en cache. Cette mise en cache est seulement en mémoire, et dure seulement le temps de la requête. Toute requête dupliquée pour les mêmes données va être gérée par le cache.