Lorsque vous définissez une association sur un modèle. CakePHP l'instancie à l'exécution et le définit comme une propriété Object pour ce modèle.
class User extends AppModel
{
public $hasMany = array('Document');
}
class Document extends AppModel
{
}
Dans l'exemple ci-dessus. User
objets contiendra une propriété appelée Document
, mais Document
ne contiendra pas User
.
class UsersController extends AppController
{
public $uses = array('User');
public function index()
{
$this->User-find(...); // works
$this->User->Document->find(..); // works, because of the hasMany
$document = ClassRegistry::init('Document');
$document->User->find(...); // does not work, not associated to User.
}
}
De plus, gardez à l'esprit que le nom de la propriété est l'alias de l'association. Pas le nom du modèle.
class User extends AppModel
{
public $hasMany = array(
'Paper'=>array('className'=>'Document')
);
}
class Document extends AppModel
{
}
Cela change le nom de la propriété à Paper
$this->User->Paper->find(..); // works as alias
Utilise les alias sur les associations vous permet d'appliquer trouver des conditions afin qu'ils génèrent des résultats différents.
class User extends AppModel
{
public $hasMany = array(
'Paper'=>array('className'=>'Document','conditions'=>array(....)),
'Resume'=>array('className'=>'Document','conditions'=>array(....))
);
}
Cela créerait deux propriétés pour les modèles User
comme ça.
$this->User->Paper->find(..); // works as alias
$this->User->Resume->find(..); // works as alias
Mais, les conditions appliquent uniquement lorsque vous effectuez une découverte sur le modèle User
.
Ceci est utile et explique quand il peut être utilisé. Mais je ne suis toujours pas clair sur ce qu'il fait réellement. En d'autres termes, comment, le cas échéant, les données renvoyées sont-elles effec- tuées? – emersonthis
Peut-être que c'est plus clair si je demande spécifiquement: Quel modèle est recherché? Le dernier de la chaîne? Ou sont tous les deux fouillés? Est-ce que '$ this-> User-> Paper-> find ('all')' retournerait tous les documents? Ou des documents ET des utilisateurs? – emersonthis
'$ this-> Utilisateur-> Document == $ this-> Document' est vrai. Les deux objets sont la même instance du modèle 'Document'. Cake définit 'Document' en tant que propriété membre de' User' pour un accès pratique. Vous n'avez pas besoin de dire 'uses = array ('User', 'Document')' dans votre contrôleur. Puisque 'User' a déjà une référence à' Document'. Vous n'avez pas non plus besoin d'appeler 'classRegistry :: init ('Document')' depuis le modèle 'User'. – cgTag