2009-10-01 9 views
2

Utilisation Doctrine PHPDoctrine PHP - dossiers liés à la charge

Si j'ai un utilisateur avec une relation plusieurs à plusieurs avec l'adresse modèle et chaque adresse a une clé étrangère à un type d'adresse (domicile, bureau). Doctrine ne charge pas automatiquement les enregistrements associés pour ce type d'adresse.

$user = Doctrine::getTable('User')->findOneById(1); // bob 
echo $user->Address[0]->address_type_id; // 4 
echo isset($user->Address[0]->AddressType); // false 
$user->Address[0]->refreshRelated(); // or $user->Address[0]->loadReference('AddressType'); 
echo isset($user->Address[0]->AddressType); // true 
echo $user->Address[0]->AddressType->name; // office 

Vous ne savez pas s'il s'agit d'un bogue ou non dans la doctrine ou mon modèle.

Mais est-ce la meilleure façon de charger des modèles associés au-delà d'un niveau de profondeur ou existe-t-il un autre moyen d'obtenir le même résultat?

Répondre

3

Avez-vous simplement essayé de vous rejoindre les uns après les autres? Fonctionne plutôt bien, si vos relations sont correctes.

$user = Doctrine::getTable('User') 
    ->createQuery('u') 
    ->leftJoin('u.Address a') 
    ->leftJoin('a.AddressType t') 
    ->findOneById(1); 

Vous économisez également vos requêtes db 2 sql par rapport à votre exemple.

2

Voulez-vous dire que vous ne pouvez pas le faire:

echo $user->Address[0]->AddressType->name; 

Si vous essayez sans que isset, Doctrine doit vérifier que la valeur est définie avant de le récupérer automatiquement pour vous.

Questions connexes