cakephp分页多个habtm
Posted
技术标签:
【中文标题】cakephp分页多个habtm【英文标题】:cakephp paginate multiple habtm 【发布时间】:2010-03-14 23:10:57 【问题描述】:我有多个这样的习惯:
// 用户模型 var $hasMany = array('Post');
// 发布模型 var $hasAndBelongsToMany = array('Category', 'Tag');
// 分类模型 var $hasAndBelongsToMany = array('Post');
//标签模型 var $hasAndBelongsToMany = array('Post');
我试图获取所有帖子及其用户和标签(在某个类别内),不知何故,如果我获取标签,结果是错误的。
$this->paginate = array
(
'Post' => array
(
'limit' => 2,
'fields' => array(
'Post.title', 'Post.content', 'Post.slug', 'Post.created',
'Tag.name',
'User.username', 'User.created', 'User.post_count', 'User.avatar_file_name'),
'joins' => array
(
array(
'table' => 'categories_posts',
'alias' => 'CategoriesPost',
'type' => 'inner',
'conditions'=> array('CategoriesPost.post_id = Post.id')
),
// FETCH USER
array(
'table' => 'users',
'alias' => 'User',
'type' => 'inner',
'conditions'=> array('Post.user_id = User.id')
),
// FETCH TAGS
array(
'table' => 'posts_tags',
'alias' => 'PostsTag',
'type' => 'inner',
'conditions'=> array('PostsTag.post_id = Post.id')
),
array(
'table' => 'tags',
'alias' => 'Tag',
'type' => 'inner',
'conditions'=> array('Tag.id = PostsTag.tag_id')
),
array(
'table' => 'categories',
'alias' => 'Category',
'type' => 'inner',
'conditions'=> array('Category.id = CategoriesPost.category_id', 'Category.slug' => $slug)
)
)
)
);
$posts = $this->paginate();
由于我是新手,谁能给我一个解决方案? 非常感谢...
【问题讨论】:
“错误”是什么意思?你能记录结果集吗? 好吧,如果我获取标签,那么结果是第一个帖子的循环。但是,如果没有提取任何标签,那么它会以正确的结果返回所有帖子。 【参考方案1】:在尝试使用关联模型对结果集进行分页时,我遇到了类似的问题。我最终不得不手动将我的模型绑定在一起,运行查询,然后解除绑定,以便让 Cake 包含正确的数据。 (http://book.cakephp.org/view/86/Creating-and-Destroying-Associations-on-the-Fly)
您还可以尝试包含行为,这将允许您指定要包含在结果集中的模型。 Containable 是 1.2+ (http://book.cakephp.org/view/474/Containable) 的核心,否则你需要自己去获取它。
不过,我不太确定您为什么会有如此庞大的查询。我会更倾向于做类似以下的事情。
$this->Model->recursive = 2;
$this->Model->paginate();
并让 Cake 通过我的关联为我获取所有相关数据。然后我会使用条件数组(http://api.cakephp.org/class/controller#method-Controllerpaginate)调整返回值来指定类别。
对不起,这不是一个事实上的解决方案,但我自己是一个 CakePHP 爱好者!您可能会发现使用 DebugKit 更容易查看查询、结果等,http://github.com/cakephp/debug_kit
【讨论】:
嗨,David,我使用 Containable 来获取类别的标签和连接表。对我来说不是最好的解决方案,但至少我得到了我想要的以上是关于cakephp分页多个habtm的主要内容,如果未能解决你的问题,请参考以下文章