回答編集履歴

2

リンクがおかしかったので修正しました。

2021/02/12 09:16

投稿

Lulucom
Lulucom

スコア1899

test CHANGED
@@ -100,4 +100,4 @@
100
100
 
101
101
 
102
102
 
103
- 参考: [updateOrCreate](https://readouble.com/laravel/6.x/ja/eloquent.html#other-creation-methods#other-creation-methods)
103
+ 参考: [updateOrCreate](https://readouble.com/laravel/6.x/ja/eloquent.html#other-creation-methods)

1

変更案を追記しました。

2021/02/12 09:16

投稿

Lulucom
Lulucom

スコア1899

test CHANGED
@@ -3,3 +3,101 @@
3
3
 
4
4
 
5
5
  $idにはEmployeeのidの値が渡ってきているので、その$idでGoodsを取得することはできません。
6
+
7
+
8
+
9
+ (追記)
10
+
11
+
12
+
13
+ 例えば、以下のような感じにするとどうでしょうか。
14
+
15
+ フォームから `goods[0][uniform]` のような name で送信させると、
16
+
17
+ アクションでは `$request->goods` で配列として受け取れるはずですので、その配列を処理すれば良さそうです。
18
+
19
+
20
+
21
+ employee_edit.blade.php
22
+
23
+
24
+
25
+ ```blade
26
+
27
+ @foreach($employee->goods as $i => $goods)
28
+
29
+ <input type="hidden" name="goods[{{ $i }}][id]" value="{{ $goods->id }}">
30
+
31
+ ...
32
+
33
+ <select name="goods[{{ $i }}][uniform]" ... > ... </select>
34
+
35
+ ...
36
+
37
+ <select name="goods[{{ $i }}][winter_clothes]" ... > ... </select>
38
+
39
+ ...
40
+
41
+ <select name="goods[{{ $i }}][shoes]" ... > ... </select>
42
+
43
+ ...
44
+
45
+ <input type="text" name="goods[{{ $i }}][other]" ... >
46
+
47
+ ...
48
+
49
+ <input type="text" name="goods[{{ $i }}][memo]" ... >
50
+
51
+ ...
52
+
53
+ @endforeach
54
+
55
+ ```
56
+
57
+
58
+
59
+ EmployeesController.php
60
+
61
+
62
+
63
+ ```php
64
+
65
+ public function update(Request $request, $id)
66
+
67
+ {
68
+
69
+ // Employeeの更新
70
+
71
+ $employee = Employee::find($id);
72
+
73
+ $employee->office = $request->office;
74
+
75
+ $employee->save();
76
+
77
+
78
+
79
+ // Goodsの更新
80
+
81
+ foreach ($request->goods as $goods) {
82
+
83
+ $employee->goods()->updateOrCreate([
84
+
85
+ 'id' => $goods['id'],
86
+
87
+ ], $goods);
88
+
89
+ }
90
+
91
+
92
+
93
+ // 更新後はリダイレクト
94
+
95
+ return redirect()->route( ... );
96
+
97
+ }
98
+
99
+ ```
100
+
101
+
102
+
103
+ 参考: [updateOrCreate](https://readouble.com/laravel/6.x/ja/eloquent.html#other-creation-methods#other-creation-methods)