我们无法通过深度关联的数据对数据进行排序
即使表是使用belongsTo和hasOne关联定义的类型,CakePHP使用深层次的子查询来获取数据,我们需要订购的字段不会出现在主查询中
示例:
Users.Articles.Posts
如果我尝试通过Articles.id订购,它可以正常工作,因为文章在查询中作为INNER JOIN存在
但是通过使用Users.Articles.Posts.id进行排序它不起作用,因为使用单独的查询检索帖子
还有其他方法可以强制CakePHP检索单个查询中的所有数据吗?
答案 0 :(得分:1)
当您执行Users.Articles.Posts
时,您基本上是说我主要对用户感兴趣,还有一些其他相关数据。因此,您可以轻松地对Users
进行排序,因为您将获得一组用户。
但是你想按Posts.id排序,那么你可能需要重新考虑你的查询以及对你来说重要的事情。而是像Posts.Articles.Users
一样查询Posts表(假设你也有正确的关联链接)。如果您这样做,则可能需要使用matching
,如果您还需要对用户和文章应用过滤器。
因此,确定您的优先级并相应地重新构建您的查询,CakePHP将提供帮助。但是考虑一下对象的集合,而不是考虑“如何让Cake生成这个SQL,我有我的头”。以这种方式使用Cake的ORM会更容易。
祝你好运!