doctrine2 загружает ассоциации "один ко многим" в режиме выборки, стремясь использовать слишком много SQL-запросов.

Я загружаю список многих сущностей.
Эти объекты связаны с другими объектами "один ко многим".
Я хочу загрузить все эти другие сущности в один запрос SQL (вместо одного запроса для каждой сущности в первом списке).

Как описано в документации doctrine2: http://www.doctrine-project.org/docs/orm/2.1/en/reference/dql-doctrine-query-language.html#tempoporary-change-fetch -mode-in-dql это должно быть возможно при загрузке "EAGER".

, но это не работает, как описано.

мой код:

class User{
    /**
     * @ORM\OneToMany(targetEntity="Address", mappedBy="user", indexBy="id", fetch="EAGER")
     */
    protected $addresses;
    public function __construct(){
        $this->addresses = new ArrayCollection();
    }
}

class Address{
    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="addresses")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="UserId", referencedColumnName="id")
     * })
     */
    private $user;
}

class UserRepository{
    public function findUsersWithAddresses(){
        return $this->getEntityManager()
            ->createQuery('SELECT u FROM MyBundle:User u ORDER BY u.name ASC')
            ->setFetchMode('MyBundle\Entity\User', 'addresses', \Doctrine\ORM\Mapping\ClassMetadata::FETCH_EAGER)
            ->setMaxResults(10)
            ->getResult();
    }
}

Метод UserRepository :: findUsersWithAddresses () выполняет 11 SQL-запросов.

Как я могу указать Doctrine использовать только один SQL-запрос для загрузки адресных сущностей?

Я использую:

  • symfony v2.0.9
  • doctrine-common 2.1.4
  • doctrine-dbal 2.1 .5
  • доктрина 2.1.5

18
задан ausi 26 January 2012 в 15:24
поделиться