Techniques pour vérifier si une relation existe dans Doctrine2
Je n'arrive pas à trouver de mention dans la Doctrine de la documentation sur la façon de vérifier si une entité a un lien à une autre entité:
http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-associations.html
Dans La Doctrine 1.x il existe une méthode appelée exists
qui pourrait être appelé une entité à vérifier:
Dans la Doctrine 2.0 c'est ce que j'ai eu tendance à le faire. Quelles techniques sont d'autres personnes à l'aide?
<?php
class Group {
private $id;
protected $name;
protected $users;
public function __construct()
{
$this->colorgroups = new ArrayCollection();
}
public function hasUsers() {
return count($this->users) > 0;
}
}
+1 pour le allusive nom de profil 🙂
L'amour que le commentaire de quelqu'un qui a choisi d'y aller par @Bastardo -.-
L'amour que le commentaire de quelqu'un qui a choisi d'y aller par @Bastardo -.-
OriginalL'auteur calumbrodie | 2011-06-03
Vous devez vous connecter pour publier un commentaire.
Bien - en fait, je suis tombé sur la bonne réponse aujourd'hui, tout en regardant si le type arraycollection classe. Vous devez utiliser le "vide".
À partir du code (les commentaires sont eux, pas le mien)
Donc, à partir de mon exemple
OriginalL'auteur calumbrodie
Doctrine2 utilisations différentes de l'architecture que de la Doctrine1.2. Si vous voulez vérifier si un groupe a un certain utilisateur associé avec elle, vous devez écrire une méthode
hasUser(User $user)
qui permettra de la déterminer:Si vous voulez vérifier si une relation est conservée dans la base de données, vous devez exécuter une à la suite de requête DQL:
Où
:user
estUser
objet.Super pédant mais HQL != DQL
Ops... je l'ai fait sortir de l'habitude. 😉 Fixe. Quant à l'avantage... il n'y a aucun. Il n'y a pas plus court de solution pour vérifier si un objet appartient à la collection (en option vous pouvez utiliser type arraycollection::contains() qui fait faire tout à fait une chose semblable). Votre
hasUsers()
faire quelque chose d'autre et doivent être inclus juste avant ma méthode en application du monde réel par la voie.Bien que cette question est mort d'une mort - j'ai été intéressé de voir les différentes approches, mais la vérité est que c'est probablement pas assez compliqué de justifier plus d'une approche 🙂 Marquée comme étant correcte
Crozin l'approche est différente car il a la capacité de vérifier si une relation existe dans un préexistante de la collection alors que kissmyface de l'vérifie uniquement si la collection existe ou pas. Je suis en train de mettre en oeuvre votre approche Crozin mais j'obtiens une erreur dictons
equals()
est une méthode non définie qui n'est pas surprenant étant donné que je ne peux pas trouver aucune mention nulle part dans la documentation. Pourriez-vous revenir sur votre réponse Crozin?OriginalL'auteur Crozin
Vous pouvez utiliser la méthode Exists http://www.doctrine-project.org/api/common/2.4/class-Doctrine.Common.Collections.ArrayCollection.html#_exists quelque chose comme cela
non, vous devez être prudent au sujet de votre mémoire 😀 vous avez dit "j'ai été intéressé de voir les différentes approches" donc, ce que je... dans mon choix de cette solution est préférable, je pense, SÉLECTIONNEZ 1 DE Monprojet\Entity\Groupe g OÙ :MEMBRE utilisateur.g.utilisateurs;
J'apprécie l'entrée - c'est toujours agréable de voir d'autres alternatives. Vous aussi m'a encouragé à consulter la requête de la classe de manière plus approfondie qui comprend toutes sortes de choses qui sont utiles mais pas entièrement documentées. Merci!
OriginalL'auteur PayteR
Alternativement, vous pouvez utiliser la gestion des exceptions
P. S Plus spécifiques exception peut être utilisé pour le rendre encore meilleur .
OriginalL'auteur Mr Coder
Je sais que c'est une vieille question, mais il pourrait être utile à quelqu'un d'autre ou peut-être même pour vous.
Je pense que ce que vous cherchez à la
relatedExists()
méthode que vous pouvez trouver ici:http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/working-with-models.html#clearing-related-records
Espère qu'il sera utile!
OriginalL'auteur mattemod