Как я могу получить доступ к связанным объектам с помощью Symfony doctrine?

#php #doctrine-orm #doctrine

#php #doctrine-orm #доктрина

Вопрос:

Я пытаюсь найти все документы, связанные с моим продуктом:

 public function findDocumentsRelatedToProduct($id) {
        return $this->createQueryBuilder('products')
                        ->leftJoin('products.documents', 'pd')
                        ->where("products.id = :id")
                        ->setParameter(':id', $id)
                        ->getQuery()
                        ->execute();

}

$products = $this->em->getRepository('App\Entity\Products')->findDocumentsRelatedToProduct($id);

foreach ($products as $key => $value) {
    dump($value->getDocuments()->getId());
}
  

Но я получаю сообщение об ошибке:

Попытка вызвать неопределенный метод с именем «getId» класса «Doctrine ORM PersistentCollection».

Ответ №1:

$value->getDocuments() Возвращает массив объектов Doctrine или PersistentCollection .

Ваш объект может иметь getId() функцию, но PersistentCollection не имеет.

Вы можете перебирать коллекцию :

 foreach ($products as $key => $value) {
    foreach ($value->getDocuments() as $document) {
        dump($document->getId());
    }
} 
  

Ответ №2:

getDocuments() возвращает коллекцию из нескольких product.documents . Итак, вам также нужно выполнить итерацию по этим документам, а затем использовать ->getId() отдельные элементы.