我在Post
和Tag
之间正确设置了HABTM关系。当用户导航到http://site.com/tag/test
之类的网址时,我想显示标有test
的所有帖子。
使用以下代码获取标记信息以及具有该标记的所有帖子:
public function view($name) {
$this->set('tag', $this->Tag->findByName($name));
}
但是,它返回的帖子未按其created
列排序,它们似乎是以“先到先得”的方式检索的。我试过这样做:
public function view($name) {
$this->set('tag', $this->Tag->findByName($name, array(
'order' => array('Post.created DESC')
)));
}
然而,这给了我一个SQL错误:
错误:SQLSTATE [42S22]:找不到列:1054未知列'标记'。 在'字段列表'
SQL查询:SELECT DISTINCT
Tag
。` FROM
投资组合.
代码AS
代码WHERE
代码.
名称`='测试'LIMIT 1
我有什么方法可以在查询中订购从最新到最旧的帖子,还是我必须在控制器中重新格式化结果数组?
答案 0 :(得分:0)
您需要在Post
模型上进行查找,然后强制从连接表到标记表的临时连接,设置Tag.name = $name
并排序Post.created DESC
的条件
或者通过重新绑定一些模型。来自cookbook的例子:
$this->Recipe->bindModel(array(
'hasOne' => array(
'RecipesTag',
'FilterTag' => array(
'className' => 'Tag',
'foreignKey' => false,
'conditions' => array('FilterTag.id = RecipesTag.tag_id')
))));
$this->Recipe->find('all', array(
'fields' => array('Recipe.*'),
'conditions'=>array('FilterTag.name'=>'Dessert')
));
将它应用到您的案例(食谱 - > Post和RecipesTag - > PostsTag)并添加您的排序