I have what sounds like a very simple problem, but after spending several hours searching through documentation & stackoverflow, I can't seem to assemble working solution. I have 2 entities and a join table:
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 can be related to 0 or 1 Bars (which means foo_id must be unique). Bar can be related to 0, 1 or many Foos. I need to be able fetch the related Bar from the FooRepository class and all related Foos from BarRepository class. Entity classes so far (they have both passed through countless iterations, I've lost track of all variations I've tried out, possibly they contain some brain farts, I'm tired and I don't know what I'm doing anymore):
/**
* @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 = [];
...
}
Repository class (that's as far as I've gotten):
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;
}
...
}