laravel 中将一对多关联查询的结果去重处理

Posted itsuibi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel 中将一对多关联查询的结果去重处理相关的知识,希望对你有一定的参考价值。

先交代下数据表结构

  • 主表(订单表)order数据
ord_id order_sn
1 EX2019100123458

其中主键为order_id(订单id)

  • 子表(门票表)order_item数据
ord_ite_id ord_id exhibit_sn type
1 1 EXSN20191001001 1
2 1 EXSN20191001002 1
3 1 EXSN20191001003 1

主表与子表之间通过 ord_id进行关联

实现:通过通过子表的 type(门票类型)查询主表中的订单编号

  第一种尝试:

select DISTINCT `order`.ord_id from `order` INNER JOIN order_item on order.ord_id = order_item.ord_id where type = 1;

这种方法可以实现但是在laravel中如果想分页的话需要这么使用

DB::table(DB::raw("sql语句"))->paginate(15);

但是这样的话我们相当于使用的原生sql语句,但是如果在添加条件的话只能去拼接sql语句啦

  第二种尝试:

select `order`.ord_id,`order`.order_sn from `order` INNER JOIN (select distinct ord_id from order_item) r on `order`.ord_id=r.ord_id

在larave中使用

Order::join(DB::raw("(select distinct order_item.ord_id item_ord_id,type from order_item) ".env("DB_PREFIX")."bb"),"bb.item_order_id","exhibit_order.order_id")->paginate(15);

这样我们可以继续使用 where() 方法来添加条件

以上是关于laravel 中将一对多关联查询的结果去重处理的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis学习系列关联查询

laravel 模型关联 一对多

Laravel5.6 Eloquent ORM 关联关系,一对一和一对多

MyBatis一对多关联表查询是使用嵌套结果好还是嵌套查询好?

MyBatis一对多查询及延迟加载

mybatis 一对一关联 association 返回空值