在我的应用程序中,我有一个线程评论系统,我称之为状态消息。我有几个模型如下
用户(id,name ......)
status_messages(id,message,......,user_id)
status_replies(id,message,......,status_message_id,user_id)
这是撰写评论系统的正确方法吗?
用户可以设置状态消息,他的朋友和他自己可以回复它。如果另一个用户回复我也想要提取他的详细信息。
答案 0 :(得分:1)
使用模型public $actsAs = array('Containable');
然后,从用户控制器:
$userWithMessagesAndReplies = $this->User->find('first' => array(
'conditions' => array(/* conditions for finding the user (User.id) */),
'contain' => array(
'StatusMessage' => array('StatusReply')
)
)
);
这只是一个例子。根据您查找的位置,您可以稍微更改上面的代码。我建议从模型方法而不是控制器返回find的结果,以便它可以重用。 (为了便于理解,我使用了一个控制器示例。)
答案 1 :(得分:1)
如果您需要线索评论系统,则应考虑使用find('threaded')
或Tree行为,{{1}}。
答案 2 :(得分:1)
我认为你不需要2张桌子。
使用单个消息表并创建两个都使用该表的模型。
I.E table = messages, Models = ProfileMessage, ProfileReply
In that table make sure there is a profile_id, a user_id
and a parent_id. Default all of these to null.
Relate the ProfileMessage as
belongsTo User,
belongsTo Profile,
hasMany ProfileReply
Relate the ProfileReply as
belongsTo ProfileMessage using the foreignKey key in the association to make sure you reference the parent_id and profile_id,
belongsTo User
然后你可以查询ProfileMessage,它应该显示所有子ProfileReply对象,就像它们来自一个单独的相关表一样。基本上,单级树结构将条目与同一表中的父条目相关联。