2010-11-25 4 views
11

Dans le modèle utilisateur:À quoi sert l'alias du modèle CakePHP?

var $hasMany = array(
     'Photo' => array(
      'className' => 'Photo', 
      'foreignKey' => 'owner_id', 
      ... 
     ), 
); 

Dans le modèle photo:

var $belongsTo = array(
     'Owner' => array(
      'className' => 'User', 
      'foreignKey' => 'owner_id', 
      ... 
      ), 
); 

Ici un utilisateur a de nombreuses photos. Donc, ma question est que le nom d'alias est 'Propriétaire', ce qui me permet de comprendre la signification exacte de 'Utilisateur', mais est-ce la seule raison d'utiliser un alias? affecte-t-il 'Photo' dans le modèle de l'utilisateur? ou comment utiliser 'Owner' dans/par cakephp?

Je ne comprends pas très bien la signification de alias dans le modèle. Appréciez votre aide!

Répondre

3

Il vous permet de faire des choses comme $this->Owner->read(null,$userId); Vous pouvez avoir un OwnersController et vues/propriétaires.

C'est ... un alias. Dans un sens, l'utilisateur est un alias pour les utilisateurs de la table db.

Un meilleur exemple: J'ai un CMS où j'utilise les articles de table pour Article, BlogItem et Nouvelles. Ces trois noms sont des alias pour la même table qui me permettent d'établir différents modèles, relations et comportements. J'ai donc un BlogItemsController et un NewsController ainsi qu'un ArticlesController.

+0

Merci, c'est vraiment utile! BTW, puis-je avoir des vues/éléments/propriétaires? est-ce censé être le même avec les vues/propriétaires (je veux dire dans le navigateur, il ne dira pas «vue des propriétaires manquants»)? – user518261

28

Deux scénarios utiles pour les alias:

1. Plusieurs clés étrangères au même modèle

Par exemple, votre table photos a deux champs: created_user_id & modified_user_id

var $belongsTo = array(
    'CreatedUser' => array(
     'className' => 'User', 
     'foreignKey' => 'created_user_id', 
     ... 
    ), 
    'ModifiedUser' => array(
     'className' => 'User', 
     'foreignKey' => 'modified_user_id', 
     ... 
    ), 
); 

2. Création de mots logiques spécifiques au domaine de votre application

Utilisation du champ de conditions dans le tableau, vous pouvez spécifier différents types de modèles:

var $hasMany = array(
    'ApprovedUser' => array(
     'className' => 'User', 
     'foreignKey' => 'group_id', 
     'conditions' => array(
      'User.approved' => 1, 
      'User.deleted' => 0 
     ), 
     ... 
    ), 
    'UnapprovedUser' => array(
     'className' => 'User', 
     'foreignKey' => 'group_id', 
     'conditions' => array(
      'User.approved' => 0, 
      'User.deleted' => 0 
     ), 
     ... 
    ), 
    'DeletedUser' => array(
     'className' => 'User', 
     'foreignKey' => 'group_id', 
     'conditions' => array('User.deleted' => 1), 
     ... 
    ), 
); 

Dans l'exemple ci-dessus, un modèle groupe a différents types d'utilisateurs (approuvés, non approuvés et supprimés). L'utilisation d'alias aide à rendre votre code très élégant.

+0

Vraiment un bon exemple, merci beaucoup! – user518261

+0

Merci! Votre deuxième exemple est une excellente idée! – 472084