CakePHP子查询,如何?

时间:2011-08-05 20:21:11

标签: mysql cakephp find

我有一个帖子模型(mysql表),结构类似于:

id, parent, user_id, title, desc, created, modified

单个会话主题包含一个帖子,后跟所有后续帖子,其中post.parent与原始post_id匹配。

user_32和user_40之间的示例对话:

110, 0, 32, thread_title, sample_description_here, created_time, modified_time
121, 110, 40, comment_title, sample_comment_here, created_time, modified_time
130, 110, 32, comment_title, sample_comment_here, created_time, modified_time
140, 110, 32, comment_title, sample_comment_here, created_time, modified_time
166, 110, 40, comment_title, sample_comment_here, created_time, modified_time
290, 110, 32, comment_title, sample_comment_here, created_time, modified_time

使用普通的PHP我只需执行外部查询,然后是内部查询,然后将对话回显到屏幕,但是如何使用CakePHP实现这一点?

问题:

如何在CakePHP中构造查询,以显示由(见上文)post_id_110组成的单个对话,然后是post.parent == 110的所有后续帖子,按created_time DESC排序。??

2 个答案:

答案 0 :(得分:1)

在帖子模型中:

var $belongsTo = array(
    'ParentPost' => array(
        'className' => 'Post',
        'foreignKey' => 'parent_id',
    ),
)

然后用作其他所有关联模型

btw - parent_id比父母更加蛋糕,并且使用支架

答案 1 :(得分:1)

在Post模型中:

var $hasMany = array(
  'Children'=>array(
    'className' => 'Post',
    'foreignKey' => 'parent_id'
   )
 );

(并在DB中将'parent'更改为'parent_id',只是一个约定)。然后在帖子控制器:

$this->Post->find('first',array(
   'conditions'=>array(...),
   'contain'=>array('Children')
));
是的,是的,并且使用可包含的。你并不真的需要它,但它会使find()更清晰,后来肯定会有用。