【问题标题】:laravel5.1 return ordered collection of itemslaravel5.1 返回有序的项目集合
【发布时间】:2016-07-23 16:51:13
【问题描述】:

我想在一个有序的 eloquent 集合中返回这个操作的结果。 首先,我知道这会变得很难看,因为项目之间没有关系。 这是我的数据库设计:

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)

【问题讨论】:

    标签: collections eloquent relational-database laravel-5.1


    【解决方案1】:

    如果我理解正确,项目之间的关系是 ticket_id
    关系:一张票有许多事件。
    关系:一张票有很多回复。
    您需要在数据库中添加一张表门票。

    【讨论】:

    • 此工单表已存在。在ticket_replies 和ticket_events 之间没有直接关系。我只需要按上述方式订购它们,这样我就可以以正确的顺序向用户展示它们。
    • 如果表ticket已经存在,为什么这两个表中有字段ticket_id?
    • 可以把关系放到对应的模型中
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 2015-03-25
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2014-10-08
    相关资源
    最近更新 更多