2

非常に単純な注文クエリで問題が発生しています。モデルと HABTM 関係を持つPostモデルTagがあり、特定のタグが割り当てられたすべての投稿のリストを、投稿が作成された日付順に並べ替えて返そうとしています。

$this->set('data', $this->Post->Tag->find('all', array(
    'conditions' => array('Tag.id' => 1),
    'contain' => array('Post' => array(
        'order' => 'Post.created_date desc'
    ))
)));

これは投稿のリストを返しますが、日付順ではありません。

デバッグをオンにすると、次のクエリが使用されているように見えます。

SELECT `Post`.`id`, `Post`.`title`, `Post`.`created_date`, `PostsTag`.`post_id`, `PostsTag`.`tag_id`
FROM `database`.`posts` AS `Post`
JOIN `database`.`posts_tags` AS `PostsTag` ON (`PotsTag`.`tag_id` = 1 AND `PostsTag`.`post_id` = `Post`.`id`)

投稿モデルのコード:

class Post extends AppModel {
    public $name = 'Post';
    public $hasAndBelongsToMany = array('Tag');
}

タグ モデルのコード:

class Tag extends AppModel {
    public $name = 'Tag';
    public $hasAndBelongsToMany = array('Post');
}

この問題に関するヘルプをいただければ幸いです - 私は CakePHP 2.1 を使用しています。違いがあれば。

4

3 に答える 3

3

タグモデルで注文属性を定義するのはどうですか?
例えばのように

var $hasAndBelongsToMany = array(
    'Post' => array(
        'order' => 'Post.created_date'
    )
);
于 2012-07-28T22:19:00.473 に答える
1

「注文」が「含む」の中にあるべきではないと思います。試してみてください:

$this->set('data', $this->Post->Tag->find('all', array(
    'conditions' => array('Tag.id' => 1),
    'contain' => array('Post'),
    'order' => 'Post.created_date desc'
)));

あるいは単に:

 $this->set('data', $this->Post->Tag->find('all', array(
        'conditions' => array('Tag.id' => 1),
        'order' => 'Post.created_date desc'
 )));
于 2012-07-24T21:09:39.373 に答える
0

これを読む:-

http://www.jamesfairhurst.co.uk/posts/view/adding_tags_to_a_cakephp_app_hasAndBelongsToMany/

http://edivad.wordpress.com/2007/04/19/cakephp-hasandbelongstomany-habtm/

//これを試して

CREATE TABLE `tags` (
  `id` int(11) NOT NULL auto_increment,
  `tag` varchar(100) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY  (`id`)
);


CREATE TABLE `posts_tags` (
  `post_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL
);


//Creating the Models and Relationships

class Tag extends AppModel {
    var $name = 'Tag';
    var $hasAndBelongsToMany = array('Post'=>array('className'=>'Post'));
}

class Post extends AppModel {
    var $name = 'Post';
    var $hasMany = array('Comment'=>array('className'=>'Comment'));
    var $hasAndBelongsToMany = array('Tag'=>array('className'=>'Tag'));
}
于 2012-07-28T21:59:40.943 に答える