关于ORM一对多关联时筛选出来多条记录中相同的,如果不相同,直接pass

运行环境 Laravel[5.5] php[7.4]

问题描述:通过ORM一对多关联查询时,筛选出来关联表的数据

这里是最后返回的数据,要根据这里面的print_times进行筛选
筛选条件类型:1. 未打印,2. 部分打印,3 全部打印
比方说我传的类型为2【部分打印】。我要查询出来barcode->print_times里面等于0的数据,且大于0的数据的话

现在的问题:

我在with方法里面使用where条件是无效的,因为它在关联表里面是一条一条的查询的,这一条对上了,下一条没有对上,他还是会把这一条数据给返回回来
中途想到了一个思路,就是再查询一遍不加筛选条件的withCount,然后使用withCount和count($barcode)进行比较,不一样的话直接删除,但是这样会影响每页的条数

理想的情况,我筛选【未打印】,就只返回当前这条数据对应关联表中的多条数据的print_times都为0的,如果有一个为大于0的话,这条数据就没有

希望各位前辈指导

JSON数据

"barcode": [
                    {
                        "print_times": "0",
                        "fnp_pack_id": "DBD2021121902490621"
                    },
                    {
                        "print_times": "1",
                        "fnp_pack_id": "DBD2021121902490621"
                    }
                ]

解决

使用whereHas

orm
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

不知道我理解的是否正确😁,说出我想到的几种方法(可以参考一下)。

第一种方法:
在关联模型里面新添加一个关联关系并加上 where 语句筛选,然后使用load方法加载数据。

第二种方法:
可以在查询结果中使用 map 方法筛选。

3年前 评论
a1538304190 (楼主) 3年前

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