我需要在 Doctrine 中执行一个简单的查询(使用Symfony 3.3)。
我有"文章"包含描述的表格,以及"数据包" table,其中包含与Article的描述相对应的id。 在标准SQL中,这很容易
std::rel_ops::operator!=,>,<=,>=
如何在学说中这样做?我几乎尝试了一切,但没有任何工作!请帮忙
答案 0 :(得分:0)
尝试使用教义魔法方法
在控制器中,类似于:
$em = $this->getDoctrine()->getManager();
$packets = $em->getRepository('NameOfYourBundle:Packets')->findByArticles($id);
答案 1 :(得分:0)
来自Zend项目的代码,虽然我认为它与Symfony没什么不同。
在某个函数(例如Repository函数)中使用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
如果这是双向关系,您只需使用Doctrine提供的默认EntityRepository
函数。
如:
$packets = $this->getObjectManager()->getRepository(Packet::class)->findBy(['article' => $article->getId()]);
如果在实体中正确设置,则更容易:
$packets = $article->getPackets();