我想在有序的雄辩集合中返回此操作的结果。 首先,我知道这会变得很难看,因为这些项目之间没有任何关系。 这是我的数据库设计:
ticket_events (can store some events like "ticket closed", "ticket moved to supporter XY" etc.)
id|ticket_id|...|...|created_at
ticket_replies (stores all "replies" made to a ticket)
|id|ticket_id|text|...|created_at
现在让我们说一个用户创建了一张票,一个支持者回答了这张票,用户最后会关闭票。这将产生这个数据。
->ticket_event (ticket opened by user X)
->ticket_replie (first question made by user X)
->ticket_replie (answer from supporter)
->ticket_event (ticket closed by user X)
回复与事件之间没有直接联系,因为它们之间没有逻辑关系。使用" created_at"对它们进行排序不会工作,因为时间戳将是相同的。 我认为订购它们并返回有序的集合将是一些丑陋的工作要做。这是我尝试过的。
class ticketHelper
{
var $ticket_replies;
var $ticket_events;
function orderReplies()
{
$ticket_replies = $this->ticket_replies;
$ticket_events = $this->ticket_events;
$events_replies = $ticket_events->merge($ticket_replies)->sortByDesc('created_at');
$filtered = $events_replies->sort(function($itemA, $itemB)
{
if($itemA->created_at == $itemB->created_at)
{
if(is_a($itemA,'ticket_event'))
{
return true;
}
else
{
return false;
}
}
else
{
return (($itemA->created_at >= $itemB->created_at) && ($itemA->created_at <= $itemB->created_at));
}
});
return $filtered;
}
}
这里有一位雄辩的专家可能会给我一些帮助以解决这个问题,所以我按照这个顺序返回了这个集合:
->ticket_event (ticket opened by user X)
->ticket_replie (first question made by user X)
->ticket_replie (answer from supporter)
->ticket_event (ticket closed by user X)
答案 0 :(得分:0)
如果我理解正确,项目之间的关系是 ticket_id 。
关系:一张票有很多事件
关系:一张票有很多回复
您需要在数据库中添加表票证。