请帮助我,我真的很挣扎......
作者可以写帖子,作者可以喜欢其他作者的帖子......
所以帖子属于作者(作者写作时),但帖子是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';
}
?>
答案 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应该包含字段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进行选择计数查询和分组,这段代码可以让你走上正确的轨道。注意:我没有测试此代码。您还需要在该查找操作中使用订单子句,但我会将其留给您。