我正在构建一个自定义存储库,我想根据一些关联进行选择。问题是我有一个单向关联,我不想做双向(有意),我选择了错误的方式。
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或我正在使用的查询构建器,我会陷入从Bar
到Foo
的关联。
虽然给我一个错误(逻辑上),这说明了我想要做的事情。
$this->getEntityManager()->createQueryBuilder()
->select('Bar')
->from('Entity\Foo', 'Foo')
->innerJoin('Foo.bars', 'Bar')
->where('Foo.collection = :collection')
->setParameter('collection', $collection);
是否可以从查询构建器或DQL返回Bar
实体,在值Foo
上过滤而不必反转关联?