2017-10-17 73 views
1

我有2个模型,队列和动作。获取充满条件的最后一个元素

队列有很多的动作,这些动作可以被挂起,重定向,成品等

我添加了定队列已采取的每一个动作一个动作。

因此,一旦添加队列对象,第一个操作就是'待定'。

我需要检索,他们的最后一个动作是PENDING(STATUS_ID = 1)或重定向(STATUS_ID = 5)

我的表看起来像这样

qms_queue ID

qms_actions队列 ID STATUS_ID queue_id

我的做法是这样的:

$queue_query->whereHas('actions', function ($query) { 
      $query->where('id', function ($query2) { 
       $query2->from('qms_actions') 
        ->select('id') 
        ->orderBy('created_at', 'desc') 
        ->limit(1); 
      }); 
     })->whereIn('status_id', [1,5]); 

但是由于我检索的status_id是1或5,但不是给定队列的最后一个,因此每个队列都会返回。

我无法弄清楚如何在雄辩中做到这一点。有人可以帮我在这里吗?

回答

1

试试这样的,如果它是确定以加载具有不想要的动作队列:

$queue_query->with('actions', function ($query) { 
      $query->whereIn('status_id', [1,5]); 
      $query->orderBy('created_at', 'desc'); 
      $query->limit(1); 
     }); 

试试这个:

$queues = $queue_query->whereHas('actions', function ($query) { 
      $query->where('id', function ($query2) { 
       $query2->from('qms_actions') 
        ->select('id') 
        ->orderBy('created_at', 'desc') 
        ->whereIn('status_id', [1,5]); 
        ->limit(1); 
      }); 
     })->get(); 

,你可以得到类似的动作即:

foreach ($queues as $queue) { 
    //$queue->actions->first(); 
} 
+0

感谢您的回复,不完全是,我必须fetc哈列表的最后一个行动严格是1或5之一的队列。 –

+0

检查我的更新:) – Maraboc

+0

很酷,这几乎是我的解决方案,但测试第二个子查询它只是返回绝对的最后一个动作,而不是每个队列的最后一个动作:S –

相关问题