【问题标题】:Symfony2 Doctrine Eager Load in QuerySymfony2 Doctrine Eager Load in Query
【发布时间】:2014-03-27 17:18:32
【问题描述】:

我使用 Symfony 2.4.2 我有两个 Doctrine Entity。实体名称:城市和城镇。

关系结构:

城市 -> 城镇 = 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 Query 未在第二项和第三项中运行。

1-) Town=>City Query(Working) Profiler 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-) Town=>城市查询(不工作)Profiler 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-) City=>Town Query(Not Working) Profiler 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);

【问题讨论】:

  • 您的问题到底是什么?另外,为什么不为fetch 模式使用注释?:@ORM\OneToMany(targetEntity="Town", mappedBy="city" fetch="EAGER")
  • 当我使用注解时,总是使用急切的加载器。我想打电话查询。

标签: php symfony doctrine-orm


【解决方案1】:

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

这是 QueryBuilder 版本:

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

【讨论】:

  • 这是迄今为止最好的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 2017-02-22
  • 1970-01-01
  • 2023-03-25
  • 2023-03-12
  • 2013-06-20
  • 1970-01-01
相关资源
最近更新 更多