当存在多个状态时,如何对第一个状态做筛选

问题

一个商品存在上线流程,如订购、物流、入库、上架。
在表中有多个记录表示相应的时间节点流程。

现在有需求如,筛选出所有目前状态为物流中的商品。

目前表结构

  1. 商品表
  2. 流程表,流程表关联商品表,最新一条记录表示商品当前状态

实现存在的问题

使用联表查询时存在一定问题,不知道怎么表达筛选出所有数据中子表内容最近一条必须为1的记录。

尝试了

$q->whereHas('follow', function ($q) use ($request){
  $q->latest()->limit(1)->where('state', $request->get('state'));
});

$q->whereHas('follow', function ($q) use ($request){
  $q->where('state', $request->get('state'))->where('dispatch_id', clone($q)->latest()->first()->dispatch_id);
});

前者无效后者报错。。

目前解决方案是

  1. 在主表中维护状态字段
  2. 通过访问器定义一个字段

想问下大家有其他的解决的方法吗

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
giao哥
1年前 评论
giao哥

首先:

SELECT MAX(id) AS id,gid FROM  liuchengbiao where state = "物流" GROUP BY gid LIMIT 20 offset 0; 

得到商品ID,然后

select * from goods where gid in(gid.....)
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!