Мне нужно выполнить простой запрос в Доктрина (используя Symfony 3.3).
У меня есть таблица «Статьи», которая содержит описание, и таблица «Пакеты», которая содержит идентификатор, соответствующий описанию статьи. В стандартном SQL это очень просто
SELECT p.article_id, a.description
FROM Articles a
JOIN Packets p
ON p.article_id=a.id
Как это сделать в учении? Я почти все перепробовала, но ничего не работает! Пожалуйста помоги
Не могу много сказать, не видя своих сущностей и отношений.
Покажите, пожалуйста, ваше отображение объекта.






Попробуйте методы доктрины магии
В контроллере что-то вроде:
$em = $this->getDoctrine()->getManager();
$packets = $em->getRepository('NameOfYourBundle:Packets')->findByArticles($id);
Код из проекта Zend, хотя я полагаю, что для Symfony он не сильно отличается.
С QueryBuilder в функции (например, в функции репозитория) где-нибудь:
// These use statements to indicate which to use in case of duplicate class names
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Query\Expr\Join;
$qb = $this->createQueryBuilder('p'); //"p" for packet
$qb->select('p.description', 'art.id')
->join(
'p.article', // "p" for Packet Entity. "article" for property on Packet Entity
'art', // "art" as short name for relation
Join::WITH, // Join type
'art.id = :article' // the param on which should the join occur
)
->setParameter('article', $article); // Set the param with an instance
$result = $qb->getQuery()->getResult(); // Get the result
Если это двунаправленная связь, вы можете просто использовать функции EntityRepository по умолчанию, предоставляемые Doctrine.
Такой как:
$packets = $this->getObjectManager()->getRepository(Packet::class)->findBy(['article' => $article->getId()]);
При правильной настройке в Entity это еще проще:
$packets = $article->getPackets();
Можете ли вы подробно рассказать, что вы пробовали и какая ошибка возникла?