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() 方法來添加條件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM