Collections laravel5.1退回订购的物品集合

Collections laravel5.1退回订购的物品集合,collections,eloquent,relational-database,laravel-5.1,Collections,Eloquent,Relational Database,Laravel 5.1,我想以有序、雄辩的方式返回此操作的结果。 首先,我知道这会变得丑陋,因为物品之间没有关系。 以下是我的数据库设计: 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|tick

我想以有序、雄辩的方式返回此操作的结果。 首先,我知道这会变得丑陋,因为物品之间没有关系。 以下是我的数据库设计:

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;
      }
    }

如果我理解正确,项目之间的关系是票证id
关系:一张票有很多活动。
关系:一张票有多个回复。

您需要在数据库中添加一个表tickets。

此ticket表已存在。票证回复和票证事件之间没有直接关系。我只需要按照上面所述对它们进行排序,这样我就可以按照正确的顺序向用户显示它们。如果表票证已经存在,为什么在这两个表中有字段票证id?您可以将关系放入相应的模型中
->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)