teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

記載途中で更新されてしまった為

2019/09/25 13:36

投稿

hyou
hyou

スコア10

title CHANGED
File without changes
body CHANGED
@@ -3,12 +3,13 @@
3
3
  検索要素は注文内容を記録したordersテーブルのカラムを基本とはしておりますが、一つだけordersテーブルのリレーション先である注文した個々のアイテムを記録したorder-itemsのさらにリレーション先の商品一つ一つの情報を記録したitemsテーブルのtype列から拾いたいと思っております。
4
4
 
5
5
  この3つのテーブルを結合して検索をしてみたのですが、下記の関係である為、ひとつのordersが複数の商品を持っていた場合、その個数分のレコードが表示されてしまいます。
6
- (受注管理ですのでordersは一意のものが一つでればいいのですが・・・例えばordersが3件しかないのに画面上だとそれ以上の件数に見えてしまうのです。。。)
6
+ (受注管理ですのでは一意のorderが一つでればいいのですが・・・例えばorderが3件しかないのに画面上だとそれ以上の件数に見えてしまいます。。。)
7
7
 
8
8
  ordersテーブル ⇔ order_itemsテーブル ⇔ itemsテーブル
9
9
  (1 対 多 対 1)
10
10
 
11
11
  ※以下、DBの情報とControllerの内容です。どなたか知恵をお借りできないでしょうか。
12
+ また足りない情報が御座いましたら、コメント下さい。
12
13
 
13
14
  ```DB
14
15
  //ordersテーブル
@@ -16,16 +17,7 @@
16
17
  | Field | Type | Null | Key | Default | Extra |
17
18
  +-------------------------+---------------------+------+-----+---------+----------------+
18
19
  | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
19
- | user_id | int(11) | NO | | NULL | |
20
20
  | order_no | varchar(255) | YES | | NULL | |
21
- | name | varchar(255) | YES | | NULL | |
22
- | email | varchar(255) | NO | | NULL | |
23
- | tel | varchar(255) | YES | | NULL | |
24
- | prefecture | varchar(255) | YES | | NULL | |
25
- | address | varchar(255) | YES | | NULL | |
26
- | postal_cd | varchar(255) | YES | | NULL | |
27
- | total_quantity | int(11) | YES | | NULL | |
28
- | amount | decimal(7,2) | YES | | NULL | |
29
21
  | deleted_at | datetime | YES | | NULL | |
30
22
  +-------------------------+---------------------+------+-----+---------+----------------+
31
23
 
@@ -34,10 +26,39 @@
34
26
  | Field | Type | Null | Key | Default | Extra |
35
27
  +------------+---------------------+------+-----+---------+----------------+
36
28
  | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
37
- | item_id | int(11) | NO | | NULL | |
29
+ | item_id | int(11) | NO | | NULL | |
38
30
  | order_id | int(11) | YES | | NULL | |
39
- | quantity | int(11) | YES | | NULL | |
40
31
  | deleted_at | datetime | YES | | NULL | |
41
32
  +------------+---------------------+------+-----+---------+----------------+
42
33
 
34
+ //itemsテーブル
35
+ +---------------+---------------------+------+-----+---------+----------------+
36
+ | Field | Type | Null | Key | Default | Extra |
37
+ +---------------+---------------------+------+-----+---------+----------------+
38
+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
39
+ | name | varchar(255) | NO | | NULL | |
40
+ | type | datetime | YES | | NULL | |
41
+ | deleted_at | varchar(255) | YES | | NULL | |
42
+ +---------------+---------------------+------+-----+---------+----------------+
43
+ ```
44
+ ```php
45
+ //Controller
46
+
47
+ public function orderSearchPost(OrderSearchRequest $req){
48
+
49
+ //テーブルの結合
50
+ $query = Order::select('orders.*')
51
+ ->join('order_items','orders.id','=','order_items.order_id')
52
+ ->join('items','order_items.item_id','=','item.id');
53
+
54
+ //typeの検索
55
+ if(!$req->filled('check_itemType')) {
56
+ $query->where('type','<>','A');
57
+ }
58
+ $collection=$query->get();
59
+
60
+ return view('orderSearch',[
61
+ "orders" => $collection,
62
+ ]);
63
+ }
43
64
  ```