Методы проверки наличия отношений в Doctrine2

Я не могу найти упоминания в документации Doctrine о том, как проверить, имеет ли сущность существующее отношение к другому объекту:

http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-associations.html

В Doctrine 1.x существует метод, называемый exists который может быть вызван сущностью, чтобы проверить это:

http://www.doctrine-project.org/documentation/manual/1_2/en/working-with-models#dealing-with-relations:clearing-related-records

В Doctrine 2.0 это то, что я обычно делал. Какие методы используют другие люди?

 <?php class Group { private $id; protected $name; protected $users; public function __construct() { $this->colorgroups = new ArrayCollection(); } public function hasUsers() { return count($this->users) > 0; } } 

    Ну, я фактически наткнулся на правильный ответ сегодня, глядя на класс ArrayCollection. Вы должны использовать метод isEmpty.

    Из кода (комментарии принадлежат их, а не мои)

     /** * Checks whether the collection is empty. * * Note: This is preferrable over count() == 0. * * @return boolean TRUE if the collection is empty, FALSE otherwise. */ public function isEmpty() { return ! $this->_elements; } 

    Так из моего примера

     public function hasUsers() { return !$this->users->isEmpty(); } 

    Doctrine2 использует другую архитектуру, чем Doctrine1.2. Если вы хотите проверить, связан ли с ней определенный пользователь, вы должны написать метод hasUser(User $user) , который определит его:

     public function hasUser(User $user) { foreach ($this->users as $u) { if ($u->equals($user)) { return true; } } return false; } 

    Если вы хотите проверить, сохраняется ли связь в базе данных, вам необходимо выполнить следующий DQL-запрос:

     SELECT 1 FROM MyProject\Entity\Group g WHERE :user MEMBER OF g.users; 

    Где :user – объект User .

    Вы можете использовать метод Exists http://www.doctrine-project.org/api/common/2.4/class-Doctrine.Common.Collections.ArrayCollection.html#_exists что-то вроде этого

     $someId = 123; $p = function($key, $element) use ($someId){ return $element->getId() == $someId; }; $u->exists($p); //here is your result 

    В качестве альтернативы вы можете использовать обработку исключений

     try { $entity = $entity->getAnotherEntity() ; // OneToOne Mapping }catch(\Exception $e) { $entity = null ; } 

    PS Более конкретное исключение можно использовать, чтобы сделать его еще лучше.

    Я знаю, что это старый вопрос, но он может быть полезен кому-то другому или, возможно, даже вам. Я думаю, что то, что вы искали, это relatedExists() который вы можете найти здесь: http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/working-with-models.html # клиринговых связанный-запись

    Надеюсь, это будет полезно!