我有2个模型,Queue和Action。
队列有许多操作,这些操作可能是待处理,重定向,完成等等。
我为给定队列的每个动作添加一个动作。
因此,只要我添加一个队列对象,第一个动作就是'Pending'。
我需要检索其最后一个操作是Pending(status_id = 1)还是Redirected(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但不是给定队列的最后一个的动作,因此,返回每个队列。
我无法弄清楚如何在雄辩中做到这一点。有人可以帮帮我吗?
答案 0 :(得分: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();
}