首页 > 解决方案 > Doctrine ORM,多对多,延迟加载。检索实体并获取加入所有功能

问题描述

我有 Zend Framework 3 + Doctrine ORM 应用程序。

   Class Goods have link "characters":

    /**
     * Goods
     *
     * @ORM\Entity
     * @ORM\Table(name="goods")
     * @property int $id
     */
    class Goods implements InputFilterAwareInterface
    {
          /**
     * @ORM\ManyToMany(targetEntity="\Application\Entity\CharacterValue", inversedBy="goods")
     * @ORM\JoinTable(name="character_value_item",
     *   joinColumns={@ORM\JoinColumn(name="good_id", referencedColumnName="id")},
     *   inverseJoinColumns={@ORM\JoinColumn(name="value_id", referencedColumnName="id")})
     **/

       protected $characters;

   public function getCharacters()
   {
      return $this->characters;
   }
  }

我尝试使用此方法通过延迟加载的方法获取字符,但它只返回一个字符。并非产品的所有字符。

$dql = 'SELECT u, ch FROM Goods u LEFT JOIN u.characters ch';

这个方法来自这里:

$query = $em->createQuery('SELECT u, p FROM CmsUser u JOIN u.phonenumbers p');
$users = $query->getResult(); // array of CmsUser objects with the phonenumbers association loaded
$phonenumbers = $users[0]->getPhonenumbers();

https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/dql-doctrine-query-language.html#dql-select-examples

我不明白为什么文档的方法会出错。解决我的问题的正确方法是什么?

标签: ormdoctrine-ormlazy-loadingzend-framework3

解决方案


推荐阅读