从教义集合symfony2加载相关的entiites

时间:2014-11-23 17:32:07

标签: php mysql symfony doctrine-orm

我有类别表和制作表。这两个表都与第三个category_make表相关,创建了多对多的关系。

/**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Ladisi\MotorsBundle\Entity\Make", inversedBy="catogory", fetch="EAGER")
     * @ORM\JoinTable(name="catogory_make",
     *   joinColumns={
     *     @ORM\JoinColumn(name="catogory_id", referencedColumnName="cat_id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="make_id", referencedColumnName="make_id")
     *   }
     * )
     */
    private $make;

我想获得属于特定类别的品牌。我试过了,

        $query = $em
            ->createQuery(
                'SELECT c, m FROM LadisiMotorsBundle:Catagory c
                JOIN c.make m
                WHERE c.catId= :id'
            )->setParameter('id', $id);
        $result = $query->getResult();

但每次我只获得类别字段时,make实体在结果中不可用。我也尝试通过在catagory对象上调用getMakes方法来获取make,它也返回null(不是实体,我猜代理)。我该如何解决这个问题。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

您已经创建了一个链接表,因此您只需在控制器中执行操作(如果您的实体配置正确):

$catagory = $this->getDoctrine()->getManager()->getRepository('LadisiMotorsBundle:Catagory')->findOneBy(['id' => $id]);
$catagory->getMakes();