我正在尝试在我的Invoice存储库中创建一个查询,以返回没有与之关联的任何 Payment 的所有 Invoice 。
这两个实体之间有一个ManyToMany关联(请注意invoice_payment
连接表),如下面的实体定义摘录所示:
班级发票:
/**
* @ORM\ManyToMany(targetEntity="Payment", inversedBy="invoice_ids")
* @ORM\JoinTable( name="invoice_payment",
* joinColumns={@ORM\JoinColumn(name="invoice_ids", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="payment_ids", referencedColumnName="id")} )
*/
protected $payment_ids;
课程付款:
/**
* @ORM\ManyToMany(targetEntity="Invoice", mappedBy="payment_ids")
*/
protected $invoice_ids;
我意识到如果我可以访问连接表invoice_payment
它应该是一个非常简单的查找 - 但是我没有在Symfony / Doctrine中找到任何讨论访问非实体数据库表的内容。这可能吗?
答案 0 :(得分:0)
据我记忆,使用Doctrine是不可能的,但你可以做的是使用普通的mysql来访问所需的表。
类似的东西:
$this->getDoctrine()->somefunctiontogetpuremysql()->query(SELECT * FROM "invoice_payment")
抱歉,我不记得那个功能是什么,你必须自己找到它。这个方法有点烦人,因为你没有得到实体,你得到简单的数据。
您也可以将ManyToMany分成两个表中的ManyToOne和OneToMany,并将其转换为实际实体。
答案 1 :(得分:0)
试一试。
$qb = $this->createQueryBuilder('i');
$qb->leftJoin('i.payments_ids', 'p')
->andWhere('p is null');
在旁注中,您的字段名称具有误导性。 payments_ids应称为付款 - 与invoice_ids相同,与发票相同。 他们不返回id,他们返回一组对象。