gpt4 book ai didi

mysql - Doctrine 问题 - 不同的查询,相同的结果,但 Doctrine 不同

转载 作者:行者123 更新时间:2023-11-29 15:04:27 24 4
gpt4 key购买 nike

我对使用 symfony 1.4 的 Doctrine 有一个小问题(我认为它使用的是 Doctrine 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();

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

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

PS:Picture 表有 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

最佳答案

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

->setHydrationMode(Doctrine::HYDRATE_SCALAR)

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

关于mysql - Doctrine 问题 - 不同的查询,相同的结果,但 Doctrine 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2479910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com