【问题标题】:load related entiites from doctrine collection symfony2从学说集合 symfony2 中加载相关的实体
【发布时间】:2015-01-21 09:48:50
【问题描述】:

我有类别表和制作表。两个表都由第三个 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();

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

【问题讨论】:

    标签: php mysql symfony doctrine-orm


    【解决方案1】:

    您已经创建了一个链接表,所以您唯一需要做的事情(如果您的实体配置正确)在您的控制器中:

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

    【讨论】:

    • 正如我所提到的,我已经尝试过你的方法它返回 null,这就是我发布问题的原因。
    • 您能在您的类别实体中显示代码吗?我看到您不一致地使用类别和类别。这可能值得一看。
    • 我知道有一些拼写错误,我已经通过在发布的代码上使用$result = $query->getResult(Query::HYDRATE_ARRAY); 解决了问题。我忘记了我能够找到解决方案,谢谢。但我不知道这里发生了什么,如果你不介意你能解释为什么你的方法不起作用(我已经再次尝试过,考虑到拼写错误)。与获取方法有关吗?
    • 啊,是的,水合 :) 通过水合,您可以指定从数据库加载结果的方式(请参阅stackoverflow.com/questions/2661762/what-is-doctrine-hydration 以获得更好的解释)。您可能期望在其中使用 Make 而不是对象或其他东西的数组。无论如何,很高兴看到你想通了。
    猜你喜欢
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多