cakephp 3按深度关联表排序

时间:2018-05-01 21:39:28

标签: php sorting cakephp

我们无法通过深度关联的数据对数据进行排序

即使表是使用belongsTo和hasOne关联定义的类型,CakePHP使用深层次的子查询来获取数据,我们需要订购的字段不会出现在主查询中

示例:

Users.Articles.Posts

如果我尝试通过Articles.id订购,它可以正常工作,因为文章在查询中作为INNER JOIN存在

但是通过使用Users.Articles.Posts.id进行排序它不起作用,因为使用单独的查询检索帖子

还有其他方法可以强制CakePHP检索单个查询中的所有数据吗?

1 个答案:

答案 0 :(得分:1)

重新思考你是如何查询你的桌子的......

当您执行Users.Articles.Posts时,您基本上是说我主要对用户感兴趣,还有一些其他相关数据。因此,您可以轻松地对Users进行排序,因为您将获得一组用户。

但是你想按Posts.id排序,那么你可能需要重新考虑你的查询以及对你来说重要的事情。而是像Posts.Articles.Users一样查询Posts表(假设你也有正确的关联链接)。如果您这样做,则可能需要使用matching,如果您还需要对用户和文章应用过滤器。

实体集合

因此,确定您的优先级并相应地重新构建您的查询,CakePHP将提供帮助。但是考虑一下对象的集合,而不是考虑“如何让Cake生成这个SQL,我有我的头”。以这种方式使用Cake的ORM会更容易。

祝你好运!