教义2 - 许多人加入

时间:2013-08-27 23:00:49

标签: php orm doctrine-orm doctrine-query

我有多个关系中的两个实体:

class Foo
{
    /**
     * @ORM\ManyToMany(targetEntity="Bar", inversedBy="foos")
     * @ORM\JoinTable(name="Foo_x_Bar")
     */
    protected $bars;
}

class Bar
{
    /**
     * @ORM\ManyToMany(targetEntity="Foo", mappedBy="bars")
     */
    protected $foos;
}

我想在结果集中获取所有Foo和Bar实例对,即:

array (size=2)
  0 => 
    array (size=2)
        'Foo' => Foo instance
        'Bar' => Bar instance
  1 => 
    array (size=2)
        'Foo' => Foo instance
        'Bar' => Bar instance

我试图通过网络上描述的几种方式来实现,但我仍然无法选择整个实体。 我可以使用此查询获取特定列:

SELECT f.something, b.somethingElse FROM Entity\Foo f LEFT JOIN f.bars b

但是当我在SELECT语句中省略列名时,我只会获得Foo实例并且Bar实例会消失。如何获得包含两个实体的结果集?

1 个答案:

答案 0 :(得分:0)

在Doctrine 2中,ManyToMany关系非常有限。它全部自动生成,而不是实体。

如果你想超越基本的默认行为,那么自己创建一个FooBar实体,并设置与Foo和Bar的单独ManyToOne关系。

这样做可以直接在FooBar上查询。它还允许您向连接表添加其他属性/关系。