0

请帮助我,我真的很努力解决这个问题......

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

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

例如,我想获取按帖子爱好者数量排序并在过去 24 小时内创建的帖子。这是我的模型和连接表:

表:lovedposts_postloves id:INTlovepost_id:INT postlover_id:INT

后模型

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

}

?> 
4

2 回答 2

0

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

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

但是,由于您不遵守可能会或可能不会不同的表的 Cake 命名约定。顺便说一句,joinModel 是自动创建的,但您也可以在 HABTM 声明中明确指定它。

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

对于查找选项,您可以做任何您需要的事情,'group' => 'post_id'或者'order' => 'COUNT(post_id)'做一些扩展的事情。您正在寻找的是获得正确的“post_ids”集。

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

希望有帮助。

于 2009-07-13T09:59:06.223 回答
0

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

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

    //POST MODEL var $hasAndBelongsToMany = array( 'Author' => array( 'className' => 'Author', 'joinTable' => 'lovedposts_postlovers', 'foreignKey' => 'author_id', 'associationForeignKey' => ' post_id', 'unique' => true ) );

例如,我想获取按帖子爱好者数量排序并在过去 24 小时内创建的帖子。这是我的模型和连接表:

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

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

于 2009-07-14T03:59:30.560 回答