いつもお世話になっております。
現在、Laravelでショッピング系のサイトを構築しており、管理側の受注管理画面にて検索機能を制作しております。
検索要素は注文内容を記録したordersテーブルのカラムを基本とはしておりますが、一つだけordersテーブルのリレーション先である注文した個々のアイテムを記録したorder-itemsのさらにリレーション先の商品一つ一つの情報を記録したitemsテーブルのtype列から拾いたいと思っております。
この3つのテーブルを結合して検索をしてみたのですが、下記の関係である為、ひとつのordersが複数の商品を持っていた場合、その個数分のレコードが表示されてしまいます。
(受注管理ですのでは一意のorderが一つでればいいのですが・・・例えばorderが3件しかないのに画面上だとそれ以上の件数に見えてしまいます。。。)
ordersテーブル ⇔ order_itemsテーブル ⇔ itemsテーブル
(1 対 多 対 1)
※以下、DBの情報とControllerの内容です。どなたか知恵をお借りできないでしょうか。
また足りない情報が御座いましたら、コメント下さい。
DB
1//ordersテーブル 2+-------------------------+---------------------+------+-----+---------+----------------+ 3| Field | Type | Null | Key | Default | Extra | 4+-------------------------+---------------------+------+-----+---------+----------------+ 5| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | 6| order_no | varchar(255) | YES | | NULL | | 7| deleted_at | datetime | YES | | NULL | | 8+-------------------------+---------------------+------+-----+---------+----------------+ 9 10//order_itemsテーブル 11+------------+---------------------+------+-----+---------+----------------+ 12| Field | Type | Null | Key | Default | Extra | 13+------------+---------------------+------+-----+---------+----------------+ 14| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | 15| item_id | int(11) | NO | | NULL | | 16| order_id | int(11) | YES | | NULL | | 17| deleted_at | datetime | YES | | NULL | | 18+------------+---------------------+------+-----+---------+----------------+ 19 20//itemsテーブル 21+---------------+---------------------+------+-----+---------+----------------+ 22| Field | Type | Null | Key | Default | Extra | 23+---------------+---------------------+------+-----+---------+----------------+ 24| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | 25| name | varchar(255) | NO | | NULL | | 26| type | datetime | YES | | NULL | | 27| deleted_at | varchar(255) | YES | | NULL | | 28+---------------+---------------------+------+-----+---------+----------------+
php
1//Controller 2 3public function orderSearchPost(OrderSearchRequest $req){ 4 5 //テーブルの結合 6 $query = Order::select('orders.*') 7 ->join('order_items','orders.id','=','order_items.order_id') 8 ->join('items','order_items.item_id','=','item.id'); 9 10 //typeの検索 11 if(!$req->filled('check_itemType')) { 12 $query->where('type','<>','A'); 13 } 14 $collection=$query->get(); 15 16 return view('orderSearch',[ 17 "orders" => $collection, 18 ]); 19}
回答3件
あなたの回答
tips
プレビュー