- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大查询(在我的查询构建器中)和很多左连接。所以我得到了带有评论和标签等的文章。
假设我有以下 dql:
$dql = 'SELECT blogpost, comment, tags
FROM BlogPost blogpost
LEFT JOIN blogpost.comments comments
LEFT JOIN blogpost.tags tags';
$result = $em->createQuery($dql)->setMaxResults(15)->getResult();
最佳答案
通过这样的查询获得正确的结果是有问题的。 Doctrine 网站上有一个教程解释了这个问题。
Pagination
本教程更多地是关于分页而不是获得前 5 个结果,但总体思路是您需要执行“SELECT DISTINCT a.id FROM articles a ... LIMIT 5”而不是普通的 SELECT。它比这更复杂一点,但是该教程中的最后 2 点应该让您走上正轨。
更新:
这里的问题不在于 Doctrine 或任何其他 ORM。问题完全在于数据库能够返回您要求的结果。这就是联接的工作方式。
如果您对查询进行解释,它将为您提供有关正在发生的事情的更深入的答案。将其结果添加到您最初的问题中将是一个好主意。
基于分页文章中讨论的内容,您似乎需要至少 2 次查询才能获得所需的结果。向查询添加 DISTINCT 有可能显着减慢查询速度,但只有在您有连接时才真正需要它。您可以编写另一个查询,只检索按创建日期排序的前 10 个帖子,而无需连接。获得这 10 个帖子的 ID 后,对您的连接进行另一次查询,然后返回 WHERE blogpost.id IN (...) ORDER BY blogpost.created
.这种方法应该效率更高。
SELECT
bp
FROM
Blogpost bp
ORDER BY
bp.created DESC
LIMIT 10
SELECT
bg
FROM
Blogpost bp
LEFT JOIN
bp.comments c
LEFT JOIN
bp.tags t
WHERE
bp.id IN (...)
ORDER BY
bp.created DESC
关于pagination - 学说2 : Limiting with Left Joins/Pagination - Best Practice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10701792/
我几乎尝试了所有方法来尝试创建代表我的数据库架构的实体,但仍然存在整页错误。如果有人能给我一些启发,我将不胜感激。 基本上我们有两份注册表,一份用于品牌,一份用于影响者。在每个表单中,我们都会要求您提
我有关于双向 OneToMany ManyToOne 的问题我的实体之间的关系 Device和 Event .这是映射的样子: // Device entity /** * @OR
我有一些具有一对多/多对一关系的实体 - 生产类- /** * @OneToMany(targetEntity="ProductionsKeywords", mappedBy="production
我正在使用 symfony 2.3 和 doctrine 2.2。我创建了一个控制台命令,以便在数据库中插入一些数据。当我尝试用当前日期更新时间列时,我收到此错误 Catchable fata
我想用 limit 做一个 fetchAll() 吗?您知道 symfony2 的实体管理器是否可行吗? 我当前的代码(获取所有,无限制): $repository = $this->getDoctr
客户需要根据需要更改项目的顺序,这意味着我需要一些“顺序”或“顺序”列来保存每个项目的实际位置。 如何使用 Doctrine 2 来实现这一点? 最佳答案 我会使用 Doctrine 的 event
在 Symfony2/Doctrine 中插入记录后触发事件的最佳方法是什么? 最佳答案 首先,将服务注册为 Doctrine 事件监听器: app/config.yml: services:
我很难让这个doctrine2扩展发挥作用。是https://github.com/djlambert/doctrine2-spatial关于如何创建多边形的文档并不多。我已经让配置文件正常工作了,但
我正在尝试对我的 FacebookEventResult 实体执行 native 查询,并创建与我的 FacebookEvent 实体的连接。 FacebookEventResult中的相关映射: /
我使用 SyliusSandbox 包开发商店。Sylius 使用 xml 文件来存储实体的 ORM 模式。 我已经将它的 xml 定义复制到我的 Bundle 中并在那里使用它。 但对于我自己的
客户需要根据需要更改项目的顺序,这意味着我需要一些“顺序”或“顺序”列来保存每个项目的实际位置。 如何使用 Doctrine 2 来实现这一点? 最佳答案 我会使用 Doctrine 的 event
我有以下查询: $em = $this->getEntityManager(); $query = $em->createQueryBuilder()->select('shopp
我定义了两个数据库实体 项目: use Doctrine\ORM\Mapping as ORM; use \Kdyby\Doctrine\Entities\MagicAccessors; /** *
我想要的是得到产品,产品应该是这样的: { idProduct: 1, mainCategory: 1, // One of the categories is the main one.
我使用以下查询: SELECT u.username, u.password, s.name, s.price FROM AcmeBundle:User u LEFT JOIN AcmeBundle:
我做了一些研究来回答它,但我没有找到。 我想知道在以下之间进行选择(加入)的最佳做法是什么: 使用查询生成器? $this->getEntityManager()->createQueryBuilde
我对原则 2 有疑问。我有以下数据库表:因此,Doctrine 生成从站点的桌面设置中检索数据的实体,但我需要从 desk_settings 表中检索所有设置并使用 desk_id 从 desk_se
我有两个实体,用户和客户端,一个客户端可以有很多用户。 通常我想要一个用户实体并延迟加载客户端,但由于某些原因,当我尝试访问其属性时,客户端代理不会自行加载。 如果我像这样转储数据 \Doctrine
我在验证方面遇到问题。在 Doctrine 1 中,我使用了这个: if ($model->isValid()) { $model->save(); } else { $errorSt
我将以下实体映射到 Doctrine 2 : class Zone { /** * @ManyToOne(targetEntity="Zone", inversedBy="child
我是一名优秀的程序员,十分优秀!