【发布时间】:2014-11-20 04:20:01
【问题描述】:
我有允许用户互相留言的用户配置文件。 (想想 Facebook/MySpace)...
给定一个profile_messages 表,其中包含以下字段id、user_id、author_id、parent_id 和message,我将如何在线程布局中有效地显示它们?
注意:cmets 将只有 1 级深度。
目前,我正在获取所有相关的 cmets,然后重建集合以在每个项目上具有 $messages 和 replies 的子集合。
$messages = new Collection();
$replySets = [];
foreach ($user->profileMessages as $message)
{
$parentId = $message->parent_id;
if ($parentId == 0)
{
$messages->put($message->id, $message);
}
else
{
$replySets[$parentId][] = $message;
}
}
foreach ($replySets as $parentId => $replies)
{
$parent = $messages->get($parentId);
if (isset($parent))
{
if ( ! isset($parent->replies))
{
$parent->replies = new Collection();
}
foreach ($replies as $reply)
{
$parent->replies->push($reply);
}
}
}
// Pass $messages to the view
这很好用。但是,我不禁想到有更好的方法来做到这一点......有没有更好的方法来做到这一点,或者也许有一种方法可以利用关系来获得与$profileMessage->replies 匹配的结果集结构?
【问题讨论】:
标签: php laravel eloquent threaded-comments