使用Doctrine

时间:2016-04-20 21:47:21

标签: symfony doctrine-orm

我听起来像一个非常简单的问题,但是花了几个小时搜索文档和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;
    }
    ...
}

0 个答案:

没有答案