1

Post我已经正确建立了和之间的 HABTM 关系Tag。当用户导航到一个 URL 时,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投资组合.标签ASTag WHERE标签.名称` = 'test' LIMIT 1

有什么方法可以让我在查询中从最新到最旧排序帖子,还是我必须在我的控制器中重新格式化结果数组?

4

1 回答 1

0

您需要在Post模型上进行查找,然后强制从连接表到标签表的临时连接,设置条件Tag.name = $name并排序Post.created DESC

或者通过重新绑定一些模型。食谱中的示例:

$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')
));

将其应用于您的案例(食谱 -> 发布和食谱标签 -> 帖子标签),然后添加您的排序

于 2013-01-21T19:40:13.880 回答