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クエリ:SELECTDISTINCT Tag` FROMポートフォリオ.タグASタグ WHEREタグ.名`='テスト'LIMIT1

クエリで投稿を新しいものから古いものに並べ替える方法はありますか、それともコントローラーで結果の配列を再フォーマットする必要がありますか?

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

それをあなたのケースに適用し(レシピ->投稿とRecipesTag-> PostsTag)、あなたのソートを追加するだけです

于 2013-01-21T19:40:13.880 に答える