php - Symfony 2.5 主义分页器执行多次选择来获取关系

标签 php mysql symfony doctrine-orm pagination

在symfony2.5和doctrine2.x中我尝试按照描述设置分页器 上doctrine documentation

我在article和topten之间有一个oneToOne关系

/**
 * Article
 *
 * @ORM\Table(name="article", indexes={@ORM\Index(name="idx_title", columns={"title"})})
 * @ORM\Entity(repositoryClass="My\TestBundle\Entity\ArticleRepository")
 *{

class Article
{
    /**
     * @var integer
     *
     * @ORM\Column(type="bigint", name="id")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    // ...

     /**
     * @ORM\OneToOne(targetEntity="My\TestMobileBundle\Entity\Topten", mappedBy="article")
     */
     protected $topten;

     public function __construct() {
        $this->topten = new ArrayCollection();
    }
}

Topten 实体:

/**
 * Topten
 *
 * @ORM\Table(name="topten", indexes={@ORM\Index(name="article_id_idx", columns={"article_id"})})
 * @ORM\Entity(repositoryClass="My\TestMobileBundle\Entity\ToptenRepository")
 *
 */
class Topten
{
    /**
     * @var integer
     *
     * @ORM\Column(type="bigint", name="id")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

     //...

     /**
     * @ORM\OneToOne(targetEntity="My\TestBundle\Entity\Article", inversedBy="topten")
     * @ORM\JoinColumn(name="article_id", referencedColumnName="id", unique=true)
     */
     protected $article;

}

Controller :

        $dql = "SELECT a from MyTestBundle:Article a";
        $em = $this->getDoctrine()->getManager();

        $query = $em->createQuery($dql)
            ->setFirstResult(0)
            ->setMaxResults(20);

$articles = new Paginator($query, $fetchJoinCollection = true);

        foreach($articles as $article)
        {   
            echo $article->getTitle() . "<br/>\n";
        }
//...

Doctrine 现在执行 21 个 Mysql 查询。

每次我打印标题时,它都会执行查询:

SELECT 
  t0.id AS id1, 
  //...
FROM 
  topten t0 
WHERE 
  t0.article_id = ?

我做错了什么或者如何阻止这种行为?

最佳答案

我自己通过向查询添加 setHint 来修复它:

$query = $em->createQuery($dql)
        ->setHint(\Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD, true)
        ->setFirstResult(0)
        ->setMaxResults(20);

我通过阅读 this answer here on stackoverflow 找到了这个答案 似乎是学说中一对一关系的常见问题。

关于php - Symfony 2.5 主义分页器执行多次选择来获取关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340629/

相关文章:

php - 如何显示 "minutes ago"而不是 posted_time 的 UTC 时间?

php - 使用 PHP 从 Mysql 数据库计算准确年龄

mysql - PhpMyAdmin 将 varbinary 导出为奇怪的字符而不是十六进制

mysql - 如何使 phpMyAdmin 从 csv 正确导入日期时间?

php - 如何通过伪造登录来测试 Symfony 2 中的 ACL 进行开发

Doctrine 2 : how to clone all values from one object onto another except ID?

Symfony2 : How to display admin-account name while impersonating user-account?

php - 从 PHP 和 MySQL 的 3 个随机数据中选择 4 列

php - WooCommerce:如何在 Hook 操作中排除特定页面

mysql - 在没有主机的情况下将 mysql 凭据存储在 my.cnf 中