来自ManyToMany关联的连接表是否可用于查询?

时间:2016-01-14 15:08:31

标签: mysql doctrine-orm many-to-many symfony

我正在尝试在我的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中找到任何讨论访问非实体数据库表的内容。这可能吗?

2 个答案:

答案 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,他们返回一组对象。