我正在使用Containable行为来获取评论列表(belongsTo Post,属于Question; Question hasMany Post,Post has has Many Comments;所有这些都属于Users) .
$data = $this->Question->find ( 'first',
array ('contain' =>
array ('User',
'Post' => array ('User', /* 'order' => 'User.created DESC'*/ )
)
)
);
当我在上面的评论中注释掉这一部分时,它是有效的 . 我想这是可以预料的,但我想要的是所有找到的帖子,应该按照它们所属的“用户”的“已创建”字段的顺序排序 . 如何在CakePHP中完成更深层次的排序?我总是得到,“警告(512):SQL错误:1054:'order clause'中的未知列'User.created'”
谢谢你的帮助!
5 回答
此外,您可能尝试从不使用连接的查找调用中对相关表进行分组 .
将调试级别设置为大于1的值,这样您就可以查看查询日志并确保Cake没有执行两次查询来获取数据 . 如果是这种情况,那么第一个查询实际上并不引用第二个表 .
如果要在这些情况下手动强制连接,可以使用Nate在以下链接中概述的Ad-Hoc连接方法 .
http://bakery.cakephp.org/articles/view/quick-tip-doing-ad-hoc-joins-in-model-find
我找到了两种方法来解决这个问题 . 第一种是直接在模型中定义第二级关联 . 现在,您可以随处访问这些数据 . 应该看起来像这样......
这种方法的问题在于它可能使一般查询比它们需要的更复杂 . 因此,您还可以将二级查询直接添加到te find或paginate语句中,如下所示:(注意:我发现由于某种原因,您无法在二级联接中使用$ belongsTo关联,并且如果它们需要重新定义它们已定义 . 例如,如果已经在$ belongsTo中定义了'Foo',则需要创建一个重复的'Foo1'以使关联起作用,如下例所示 . )
我希望这很清楚,可以理解并帮助某人 .
检查你的递归值 . 如果's too limiting, it will ignore the containable links, IIRC. I remember bumping into this a few times. I' d尝试包含多个模型,但我的
recursive
选项设置为0
并且没有任何内容会被拉出 . 对于你的例子,我认为值为1
(默认值)就足够了,但也许你已经明确地将它设置为0
?您可以在调用之前添加find()以下内容:
是的,我无法弄清楚如何根据相关/相关模型进行排序,因此最终使用了
Set::sort()
方法 . 结帐this article获得了很好的解释 .......是的,它可能应该是一个
Category->find()
但不幸的是原始开发者并没有想要重新审视这些观点 .