【问题标题】:Doctrine issue - Different queries, same results but not with Doctrine教义问题 - 不同的查询,相同的结果,但不是教义
【发布时间】:2010-03-19 19:02:47
【问题描述】:

我对使用 symfony 1.4 的教义有一点问题(我认为它使用的是 1.2 教义)。我有 2 个查询,在 mysql 控制台中使用原始 sql,它们产生相同的结果集。可以使用以下代码生成查询:

    $dates = Doctrine::getTable('Picture')
              ->createQuery('a')
              ->select('substr(a.created_at,1,10) as date')
              ->leftjoin('a.PictureTag pt ON a.id = pt.picture_id')
              ->leftjoin('pt.Tag t ON t.id = pt.tag_id')
              ->where('a.created_at <= ?', date('Y-m-d 23:59:59'))
              ->orderBy('date DESC')
              ->groupby('date')
              ->limit(ITEMS_PER_PAGE)
              ->offset(ITEMS_PER_PAGE * $this->page)
              ->execute();

如果我删除这两个连接,它会更改查询,但结果集是相同的。 但是使用学说 execute(),只产生一行。

有人知道这里发生了什么吗?

PS:图片表有id、title、file、created_at(格式'Y-m-d h:i:s'),Tag表是id、name和PictureTag是一个有id和两个外键的关系表。

PS 2:这是生成的两个 sql 查询(第一个没有连接)

SELECT substr(l.created_at, 1, 10) AS l__0 FROM lupa_picture l WHERE (l.created_at <= '2010-03-19 23:59:59') GROUP BY l__0 ORDER BY l__0 DESC LIMIT 4

 SELECT substr(l.created_at, 1, 10) AS l__0 FROM lupa_picture l LEFT JOIN lupa_picture_tag l2 ON (l.id = l2.picture_id) LEFT JOIN lupa_tag l3 ON (l3.id = l2.tag_id) WHERE (l.created_at <= '2010-03-19 23:59:59') GROUP BY l__0 ORDER BY l__0 DESC LIMIT 4

【问题讨论】:

    标签: mysql symfony1 doctrine


    【解决方案1】:

    这周我有类似的事情。 Doctrine 生成的 SQL(来自 Symfony 调试工具栏)在 phpMyAdmin 中运行良好,但在运行您的问题中的查询时失败。尝试将以下内容添加到您的查询中:

    ->setHydrationMode(Doctrine::HYDRATE_SCALAR)
    

    看看它是否给你预期的结果。如果是这样,则归结为使用 Picture 主键作为集合中的索引的 Doctrine_Collection。如果您有超过 1 个具有相同索引的结果,Doctrine 将拒绝将其添加到集合中,因此您最终只会得到 1 个结果。我最终使用不同的表而不是我想要的表运行查询,这导致了一个唯一的主键,然后出现了我想要的结果。

    【讨论】:

    • 现在它返回零行 XD 我想我已经解决了...除了 substr() 之外,它还需要表格的另一列。使用 select(substr(), a.created_at) 使它工作(现在)
    • 我之前遇到过一些我认为是由这个问题引起的问题并解决了这个问题 - 现在我知道了!塔
    【解决方案2】:

    嗯,解决方案是……除了 substr(),它还需要表格的另一列。使用 select(substr(), a.created_at) 使其工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 2021-11-19
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2012-02-12
      相关资源
      最近更新 更多