具有单向关联的Doctrine querybuilder

时间:2014-02-25 09:55:41

标签: php doctrine-orm dql query-builder

我正在构建一个自定义存储库,我想根据一些关联进行选择。问题是我有一个单向关联,我不想做双向(有意),我选择了错误的方式。

P.S。不想让它成为双向的原因是因为Bar(实际上是用户)被很多实体使用,我不想用所有那些反向关联阻塞我的Bar实体。

例如: \实体\富:

namespace Entity;
class Foo
{
    /**
     * @ManyToMany(targetEntity="\Entity\Bar")
     */
    $bars;

    /**
     * @Column(type="string")
     */
    $collection;
}

\实体\栏:

namespace Entity;
class Bar
{
}

\库\栏:

namespace Repository;
class Bar
{
    public function findByFooCollection($collection)
    {
        //something needs to go here
    }
}

我应该写sql,我会写这个查询:

SELECT
  *
FROM Bar
INNER JOIN Bar_Foo ON Bar_Foo.bar_id = Bar.id
INNER JOIN Foo on Foo.id = Bar_Foo.foo_id
WHERE Foo.collection = :collection

然而,由于它是DQL或我正在使用的查询构建器,我会陷入从BarFoo的关联。

虽然给我一个错误(逻辑上),这说明了我想要做的事情。

$this->getEntityManager()->createQueryBuilder()
                ->select('Bar')
                ->from('Entity\Foo', 'Foo')
                ->innerJoin('Foo.bars', 'Bar')
                ->where('Foo.collection = :collection')
                ->setParameter('collection', $collection);

是否可以从查询构建器或DQL返回Bar实体,在值Foo上过滤而不必反转关联?

0 个答案:

没有答案