【问题标题】:symfony2 / doctrine2 - dql statement onetoManysymfony2 / 学说 2 - dql 声明 onetoMany
【发布时间】:2012-03-18 15:36:59
【问题描述】:

我有一个实体司机和一个实体汽车。一个司机有很多辆车。 我有以下 dql 查询:

$query = $this->getEntityManager()->createQuery('select d, c FROM driver d JOIN d.cars c WHERE c.color=:color');                
$query->setParameter('color', $color);
$query->setFirstResult((int)$offset ? $offset*15 : 0 );
$query->setMaxResults(15);   

结果列表有 5 行。但是当我在控制台中执行创建的 sql 查询时,我有 15 行。 当我将连接类型更改为左连接时,行数是按汽车而不是按司机计算的。但是我正在使用寻呼机来阅读红色汽车的司机。

有人知道我做错了什么吗? 非常感谢。

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    当您使用 Doctrine 进行 fetch join 查询时,每个实体返回不止一行。如果您对这些查询使用 setMaxResults,则会丢弃一些实体。

    阅读:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#first-and-max-result-items-dql-query-only

    解决办法在这里:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/pagination.html

    【讨论】:

    • 很好的答案!关于分页,阅读它,我只能假设它对于相同的更大数据集来说将是致命的昂贵操作......
    • 在这种情况下缓存是你的朋友
    • 我按日期排序我的查询,但结果很混乱。最后 3 行来自第二个检测到的日期。通过示例数据集:2012-03-20、2012-03-21、2012-03-22、2012-03-23、2012-03-24、2012-03-21
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多