【问题标题】:Get the last element that fulfills condition in eloquent获取 eloquent 中满足条件的最后一个元素
【发布时间】:2017-10-17 16:02:26
【问题描述】:

我有 2 个模型,队列和动作。

一个队列有很多动作,这些动作可能是挂起的、重定向的、完成的等等。

我为给定队列执行的每个操作添加一个操作。

所以,添加队列对象后,第一个操作是“待处理”。

我需要检索其最后一个操作为待处理 (status_id = 1) 或已重定向 (status_id = 5) 的队列

我的桌子是这样的

qms_queue 身份证

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,但不是给定队列的最后一个的操作,因此,每个队列都被返回。

我无法弄清楚如何用雄辩的方式做到这一点。有人可以帮我吗?

【问题讨论】:

    标签: php laravel eloquent subquery


    【解决方案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();
    }
    

    【讨论】:

    • 感谢您的回复,不完全是,我必须获取最后一个操作严格为 1 或 5 之一的队列的列表。
    • 酷,我猜这几乎是解决方案,但是测试第二个子查询它只返回绝对的最后一个动作,而不是每个队列的最后一个动作:S
    • 嗯谢谢您的支持,我找不到让它按预期工作的方法,我需要过滤我可以从此查询中获得的操作:select * from (select *从 qms_actions where queue_id = QUEUE_ID order by updated_at desc limit 1) as qms_actions1 where status_id in (1,5) 尽量减少调用次数,如果可能的话
    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 2011-04-16
    • 2018-09-27
    • 2022-01-08
    • 1970-01-01
    • 2012-12-04
    • 2016-01-23
    相关资源
    最近更新 更多