我有3张桌子:
活动有两个属性:item_id
和item_type
。属性item_type
指定它是帖子还是评论,item_id
包含相应类型的ID。评论也与帖子有关。我需要根据发布时间对我的活动进行排序。
既然活动可以链接到帖子或评论,我怎样才能定义这种关联并在cake php中写一个查询?
编辑:
与该问题相关的属性如下
活动:item_id,item_type
帖子:id,创建
评论:id,post_id
答案 0 :(得分:0)
在你的情况下帖子有评论没有发表评论不能在那里 我不是一个蛋糕php的人,但我可以从一个示例查询中解释。
SELECT * FROM Activities a
INNER JOIN Posts p ON a.item_id = p.item_id
INNER JOIN Comments c ON c.post_id = p.id
ORDER BY created
我认为这会对你有帮助。
答案 1 :(得分:0)
在Activity
模型中
public $belongsTo = array
(
'Post' => array
(
'foreignKey' => 'item_id',
'conditions' => array('Activity.item_type' => 'Post')
),
'Comment' => array
(
'foreignKey' => 'item_id',
'conditions' => array('Activity.item_type' => 'Comment')
)
);
所以在ActivitiesController
你可以做到
$this->Activity->virtualFields['post_created'] => "IF(Activity.item_type = 'Post'), Post.created, CommentPost.created)";
$this->Activity->find
(
'all',
array
(
'joins' => array
(
array
(
'table' => 'posts',
'alias' => 'CommentPost',
'conditions' => array(
'Comment.post_id = Post.id'
)
),
'order' => array('Activity.post_created'),
)
);