我听起来像一个非常简单的问题,但是花了几个小时搜索文档和stackoverflow,我似乎无法组装工作解决方案。我有2个实体和一个连接表:
foo (
int id primary key,
...
)
bar (
int id primary key,
...
)
foo_bar (
int foo_id references foo(id) unique,
int bar_id references bar(id),
primary key (foo_id, bar_id)
)
Foo可以与0或1条相关(这意味着foo_id必须是唯一的)。栏可以与0,1或许多Foos相关。我需要能够从FooRepository类中获取相关的Bar以及从BarRepository类中获取所有相关的Foos。 到目前为止实体课程(他们都经历了无数次迭代,我已经忘记了我尝试过的所有变化,可能它们包含了一些脑屁,我累了,我不会这样做。我知道我在做什么了):
/**
* @ORM\Table(name="foo")
* @ORM\Entity(repositoryClass="FooBarBundle\Repository\FooRepository")
*/
class Foo
{
...
/**
* @ORM\ManyToMany(targetEntity="Bar")
* @ORM\JoinTable(
* name="foo_bar",
* joinColumns={@ORM\JoinColumn(name="foo_id", referencedColumnName="id", unique=true)},
* inverseJoinColumns={@ORM\JoinColumn(name="bar_id", referencedColumnName="id")}
* )
* @param Bar $bar
*/
protected $bar;
...
}
/**
* @ORM\Table(name="bar")
* @ORM\Entity(repositoryClass="FooBarBundle\Repository\BarRepository")
*/
class Bar
{
...
/**
* @ORM\ManyToMany(targetEntity="Foo")
* @ORM\JoinTable(
* name="foo_bar",
* joinColumns={@ORM\JoinColumn(name="bar_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="foo_id", referencedColumnName="id")}
* )
* @param Foo[] $foo
*/
protected $foos = [];
...
}
存储库类(就我而言):
class FooRepository extends EntityRepository
{
...
public function findBar(Foo $foo)
{
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('b')
->from('FooBarBundle:Foo', 'f')
->join('f.bar', 'b')
->where('f.id = :val')
->setParameter('val', $foo->getId());
$bar = $qb->getQuery()->getResult();
return $bar;
}
...
}