質問編集履歴
1
記載途中で更新されてしまった為
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
|
-
(受注管理ですので
|
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
|
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
|
```
|