CakePHP 2.4.2:注释模型关系获取原始帖子';书名
我有一个非常典型的评论模型,其中评论属于许多其他模型,如文章、评论、照片等,而这些模型中的每一个都有很多评论。下面是我如何在评论模型上建立关系CakePHP 2.4.2:注释模型关系获取原始帖子';书名,cakephp,model,relationship,cakephp-2.1,Cakephp,Model,Relationship,Cakephp 2.1,我有一个非常典型的评论模型,其中评论属于许多其他模型,如文章、评论、照片等,而这些模型中的每一个都有很多评论。下面是我如何在评论模型上建立关系 <?php App::uses('AppModel', 'Model'); class Comment extends AppModel { var $name = "Comment"; public $belongsTo = array( 'User' => array( 'className' =>
<?php
App::uses('AppModel', 'Model');
class Comment extends AppModel {
var $name = "Comment";
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Article' => array(
'className' => 'Article',
'foreignKey' => 'post_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Photo' => array(
'className' => 'Photo',
'foreignKey' => 'post_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Review' => array(
'className' => 'Review',
'foreignKey' => 'post_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
}
不幸的是,如果最近的评论是在一张照片上的,这只会显示正确的标题(comment.module_id=8)
您可以使用CakePHP并执行以下操作:
//within a method of the Comment model
$recentComments = $this->find('all', array(
'contain' => array(
'Article',
'Photo',
'Review',
'User'
),
'limit' => 10,
'order' => $this->alias . '.created DESC'
));
然后,你会得到评论和他们的任何父母,不管它在哪种型号。之后,当您重复每个注释时,您可以执行case语句,或者执行if(!empty())
之类的操作来确定哪个模型包含要显示的内容
(旁注:每次尝试使用“Original”时,使用相同的名称创建多个关联不是一个好主意)只使用条件
Comment.module_id=8
得到注释也就不足为奇了。您犯了一个基本的PHP错误。通过多次使用相同的键Original
,每次都有效地覆盖了它的值。为每个关联选择唯一的别名(数组键)。你是对的,但这只是它不起作用的原因,而不是答案。如果他给每个人一个不同的别名,那么根本没有理由给他们别名——只需使用模型本身(根据我已经给出的答案)。“为每个关联选择唯一的别名(数组键)。”这就是答案。别名可以与模型类名相同,也可以不同。'order'=>$this->alias'。created DESC'
给了我一个错误。如果必须更改为“Comment.created DESC”,则循环将不那么漂亮,但至少可以工作。谢谢。好的,我有两个问题,请看问题中的编辑。这是正确的答案,但它确实减慢了我的应用程序,因为我的数据库结构是如何设置的。我有文章,评论,照片,etc在不同的表和一个名为modules的表中,其中每个表都是一行,并且都有一个唯一的id。comments表有一个名为module_id的列。现在我将所有内容移动到posts表中,如果我有一个侧边栏,并且希望显示我可以设置查找条件的最新文章,则继续使用名为module_id的列模块id=3。无论如何,现在Post模型有很多注释,但注释只是返回Post的别名。除非您有大量的数据,否则我猜任何缓慢都是由于不正确的表索引(和/或缺少缓存)造成的。保持您希望的数据库表结构应该没有问题。我还添加了缓存,但它每5分钟清除一次,所以非常轻。我有很多数据。即使我有我的老方法,我也使用了一点缓存,它持续了30分钟,但速度非常慢。我把速度降低了大约300%,而不是用一个全新的问题来编辑你的问题,你应该把这个问题划掉,然后再问另一个问题,为什么你的内容没有按预期工作……等等,请参见问题
//within a method of the Comment model
$recentComments = $this->find('all', array(
'contain' => array(
'Article',
'Photo',
'Review',
'User'
),
'limit' => 10,
'order' => $this->alias . '.created DESC'
));