Symfony2学说急切加载查询


Symfony2 Doctrine Eager Load in Query

我使用Symfony 2.4.2,我有两个Doctrine实体。实体名称:City和Town.

关系结构:

城市->城镇= OneToMany城镇->城市= ManyToOne

实体/City.php

/**
 * @ORM'OneToMany(targetEntity="Town", mappedBy="city")
 */
private $towns;
实体/Town.php

/**
 * @ORM'ManyToOne(targetEntity="City", inversedBy="towns")
 * @ORM'JoinColumn(name="city_id", referencedColumnName="id")
 */
private $city;

Where In查询在第二项和第三项中没有运行。

1-)城镇=>城市查询(工作)分析器SS: http://prntscr.com/34lx9q

$query = $this->_entityManager->createQuery('SELECT town FROM PersonalSiteBundle:Town town');
$query->setFetchMode(
    'Personal'SiteBundle'Entity'Town',
    "city",
    'Doctrine'ORM'Mapping'ClassMetadata::FETCH_EAGER
);
$query->execute();

2-)城镇=>城市查询(不工作)分析器SS: http://prntscr.com/34ly4h

$query = $this->_entityManager->createQuery('SELECT town FROM PersonalSiteBundle:Town town');
$query->setFetchMode(
    'Personal'SiteBundle'Entity'Town',
    "city",
    'Doctrine'ORM'Mapping'ClassMetadata::FETCH_EAGER
);
$query->execute(array(),Query::HYDRATE_ARRAY);

3-)城市=>城镇查询(不工作)分析器SS: http://prntscr.com/34ly4h

$query = $this->_entityManager->createQuery('SELECT city FROM PersonalSiteBundle:City city');
$query->setFetchMode(
    'Personal'SiteBundle'Entity'City',
    "towns",
    'Doctrine'ORM'Mapping'ClassMetadata::FETCH_EAGER
);
$query->execute(array(),Query::HYDRATE_ARRAY);

如果您希望在存储库中执行此操作,则可以执行JOIN操作并将资源添加到所选对象中。

这是QueryBuilder版本:

$qb = $this->createQueryBuilder('city')
    ->addSelect('town')
    ->innerJoin('town.city', 'city');
$cities = $qb->getQuery()->getResult();