post habtm postlover:如何按照后期人数订购帖子?

时间:2009-07-13 09:20:29

标签: cakephp count has-and-belongs-to-many

请帮助我,我真的很挣扎......

作者可以写帖子,作者可以喜欢其他作者的帖子......

所以帖子属于作者(作者写作时),但帖子是habtm 作者(当作者喜欢他们时)。

例如,我希望按照多个postlovers和 在过去24小时内创建。这是我的模型和连接表:

表:lovedposts_postlovers id:INT lovedpost_id:INT postlover_id:INT

POST MODEL

<?php
class Post extends AppModel {
var $name = 'Post';
var $belongsTo = 'Author';

var $hasAndBelongsToMany = array(
        'Postlover' =>
            array(
                 'className'              => 'Author',
                 'joinTable'              => 'lovedposts_postlovers',
                 'foreignKey'             => 'lovedpost_id',
                'associationForeignKey'  => 'postlover_id',
                'unique'                 => true
            )
    );

var $displayField = 'title';

}

?>

作者模型

<?php
class Author extends AppModel {
var $name = 'Author';
var $hasMany = 'Post';

var $hasAndBelongsToMany = array(
        'Lovedpost' =>
            array(
                 'className'              => 'Post',
                 'joinTable'              => 'lovedposts_postlovers',
                 'foreignKey'             => 'postlover_id',
                'associationForeignKey'  => 'lovedpost_id',
                'unique'                 => true
            )

    );

var $displayField = 'username';

}

?> 

2 个答案:

答案 0 :(得分:0)

您最好的选择是查询joinModel。通常是:

$this->Author->AuthorsLovedpost->find(...);

但是,因为你没有坚持表的Cake命名约定,这些约定可能会有所不同。 joinModel是自动创建的BTW,但您也可以在HABTM声明中明确指定它。

var $hasAndBelongsToMany = array(
    'Postlover' => array(
         ...,
         'with' => 'joinModelName'
    )
);

对于查找选项,您可以执行任何操作'group' => 'post_id''order' => 'COUNT(post_id)'或其他内容。您正在寻找的是获得正确的'post_ids'。

从joinModel的角度来看,Author和Post模型都是belongsTo关系,Cake会相应地找到相关结果,你可以使用通常的'contain'选项等来过滤结果。

希望有所帮助。

答案 1 :(得分:0)

我认为您应退后一步,尝试阅读文档(book.cakephp.org)。尝试使用他们的示例进行演示。

  • lovedposts_postlovers表非常混乱,也许应该被称为其他东西,也许是authors_posts甚至是收藏夹。好吧,只要你在'joinTable'中指定它就可以是任何东西。
  • lovedposts_postlovers应该包含字段author_id,post_id

    // POST MODEL     var $ hasAndBelongsToMany = array(         '作者'=&gt;             阵列(                  'className'=&gt; '作者',                  'joinTable'=&gt; 'lovedposts_postlovers',                  'foreignKey'=&gt; 'AUTHOR_ID',                 'associationForeignKey'=&gt; 'POST_ID',                 'unique'=&gt;真正             )     );

例如,我想按照过去24小时内创建的帖子数来订购帖子。这是我的模型和连接表:

$this->Post->LovedPosts->find('all', array('fields'=>array('Post.title', 'count(LovedPosts.*) as favorited'), 'group'=>'LovedPosts.post_id');

基本上你想通过post_id进行选择计数查询和分组,这段代码可以让你走上正确的轨道。注意:我没有测试此代码。您还需要在该查找操作中使用订单子句,但我会将其留给您。