質問編集履歴

8

現在の詳細情報追加

2020/10/15 04:49

投稿

pup-ganbaru
pup-ganbaru

スコア29

test CHANGED
File without changes
test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- エラー文など出ず、中間テーブルにレコードが追加されません
41
+ エラー文など出ず、中間テーブルにレコードが追加されません(普通の投稿機能は完成しているので、castsにはレコードが保存されます。)
42
42
 
43
43
  おそらくcast controllerのstoreメソッドか、create_confirmのhiddenでstoreにデータを送ってる記述あたりがおかしいのだとおもうのですが、中々解決できません。
44
44
 

7

書式改善

2020/10/15 04:49

投稿

pup-ganbaru
pup-ganbaru

スコア29

test CHANGED
File without changes
test CHANGED
@@ -34,13 +34,13 @@
34
34
 
35
35
  2020 10/15日 現在
36
36
 
37
-  phpper.kさんのご回答(2020/10/14 17:25)により、複数のフォームで送信して確認画面へデータを渡すことには成功したのですが、そこから中間テーブル(cast_site)にcast_id site_id site_emailのデータを追加することができません。
37
+  phpper.kさんのご回答(2020/10/14 17:25)により、複数のフォームで送信して確認画面(create_confirm)へデータを渡すことには成功したのですが、そこから中間テーブル(cast_site)にcast_id site_id site_emailのデータを追加することができません。
38
38
 
39
39
 
40
40
 
41
41
  エラー文など出ず、中間テーブルにレコードが追加されません
42
42
 
43
- おそらくcast controllerのstoreメソッドか、create_confirmのhiddenでデータを送ってる記述あたりがおかしいのだとおもうのですが、中々解決できません。
43
+ おそらくcast controllerのstoreメソッドか、create_confirmのhiddenでstoreにデータを送ってる記述あたりがおかしいのだとおもうのですが、中々解決できません。
44
44
 
45
45
 
46
46
 

6

情報追加

2020/10/15 04:33

投稿

pup-ganbaru
pup-ganbaru

スコア29

test CHANGED
File without changes
test CHANGED
@@ -22,14 +22,28 @@
22
22
 
23
23
 
24
24
 
25
- このように保存されてほしいです
25
+ このように保存されてほしいですが、
26
-
27
-
28
26
 
29
27
  中間テーブルのリレーションはできています。
30
28
 
31
29
 
32
30
 
31
+
32
+
33
+ ### 修正
34
+
35
+ 2020 10/15日 現在
36
+
37
+  phpper.kさんのご回答(2020/10/14 17:25)により、複数のフォームで送信して確認画面へデータを渡すことには成功したのですが、そこから中間テーブル(cast_site)にcast_id site_id site_emailのデータを追加することができません。
38
+
39
+
40
+
41
+ エラー文など出ず、中間テーブルにレコードが追加されません
42
+
43
+ おそらくcast controllerのstoreメソッドか、create_confirmのhiddenでデータを送ってる記述あたりがおかしいのだとおもうのですが、中々解決できません。
44
+
45
+
46
+
33
47
  ### 該当のソースコード
34
48
 
35
49
 
@@ -78,6 +92,60 @@
78
92
 
79
93
  ```
80
94
 
95
+
96
+
97
+ cast create_confirm.blade 確認画面
98
+
99
+
100
+
101
+ ```ここに言語を入力
102
+
103
+ <form action="{{ route('cast.store')}}" method="post">
104
+
105
+ <p>キャスト名</p>
106
+
107
+ {{$data['cast_name']}}
108
+
109
+ <p>パスワード</p>
110
+
111
+ {{$data['cast_password']}}
112
+
113
+
114
+
115
+ <p>連携サイトメールアドレス</p>
116
+
117
+ <!-- 配列の中の配列を取り出す -->
118
+
119
+ @foreach ($data['site_email'] as $site_email)
120
+
121
+ {{$site_email}}
122
+
123
+ @endforeach
124
+
125
+
126
+
127
+ <input type="hidden" name="cast_name" value="{{$data['cast_name']}}">
128
+
129
+ <input type="hidden" name="cast_password" value="{{$data['cast_password']}}">
130
+
131
+
132
+
133
+ @foreach ($data['site_email'] as $site_email)
134
+
135
+ <input type="hidden" name="site_email[]" value="{{$site_email}}">
136
+
137
+ @endforeach
138
+
139
+
140
+
141
+ @csrf <input type="button" onclick="history.back()" value="戻る">
142
+
143
+ <button type="submit" name="store">登録</button>
144
+
145
+ </form>
146
+
147
+ ```
148
+
81
149
  CastControlller
82
150
 
83
151
  ```ここに言語を入力
@@ -118,13 +186,91 @@
118
186
 
119
187
  }
120
188
 
189
+
190
+
191
+ public function create_confirm(Request $request)
192
+
193
+ {
194
+
195
+ $data = $request->all();
196
+
197
+ return view('cast.create_confirm', ['data' => $data,]);
198
+
199
+ }
200
+
201
+
202
+
203
+ public function store(Request $request)
204
+
205
+ {
206
+
207
+ $cast = new Cast;
208
+
209
+ $cast->cast_name = $request->cast_name;
210
+
211
+ $cast->cast_password = $request->cast_password;
212
+
213
+ $cast->save();
214
+
215
+ $cast->sites()->attach($request->site_id);
216
+
217
+
218
+
219
+ return redirect()->route('cast.index');
220
+
221
+ }
222
+
223
+ ```
224
+
225
+
226
+
227
+ Cast.php
228
+
229
+ ```ここに言語を入力
230
+
231
+ <?php
232
+
233
+
234
+
235
+ namespace App\Models;
236
+
237
+
238
+
239
+ use Illuminate\Database\Eloquent\Factories\HasFactory;
240
+
241
+ use Illuminate\Database\Eloquent\Model;
242
+
243
+
244
+
245
+ class Cast extends Model
246
+
247
+ {
248
+
249
+ use HasFactory;
250
+
251
+ protected $table = 'casts';
252
+
253
+
254
+
255
+ public function sites()
256
+
257
+ {
258
+
259
+ return $this->belongsToMany('App\Models\Site');
260
+
261
+ }
262
+
121
263
  }
122
264
 
265
+
266
+
123
- ```
267
+ ```
124
-
125
-
126
-
268
+
269
+
270
+
127
- Cast.php
271
+ Site.php
272
+
273
+
128
274
 
129
275
  ```ここに言語を入力
130
276
 
@@ -142,21 +288,35 @@
142
288
 
143
289
 
144
290
 
145
- class Cast extends Model
291
+ class Site extends Model
146
292
 
147
293
  {
148
294
 
149
295
  use HasFactory;
150
296
 
151
- protected $table = 'casts';
297
+ protected $table = 'sites';
298
+
152
-
299
+ protected $fillable = ['site_name', 'site_url'];
153
-
154
-
300
+
301
+
302
+
155
- public function sites()
303
+ public function stores()
156
-
304
+
157
- {
305
+ {
158
-
306
+
159
- return $this->belongsToMany('App\Models\Site');
307
+ return $this->belongsToMany('App\Models\Store');
308
+
309
+ }
310
+
311
+
312
+
313
+ public function casts()
314
+
315
+ {
316
+
317
+ //withPivotで中間テーブルの値を取得
318
+
319
+ return $this->belongsToMany('App\Models\Casts')->withPivot('site_email');
160
320
 
161
321
  }
162
322
 
@@ -166,66 +326,6 @@
166
326
 
167
327
  ```
168
328
 
169
-
170
-
171
- Site.php
172
-
173
-
174
-
175
- ```ここに言語を入力
176
-
177
- <?php
178
-
179
-
180
-
181
- namespace App\Models;
182
-
183
-
184
-
185
- use Illuminate\Database\Eloquent\Factories\HasFactory;
186
-
187
- use Illuminate\Database\Eloquent\Model;
188
-
189
-
190
-
191
- class Site extends Model
192
-
193
- {
194
-
195
- use HasFactory;
196
-
197
- protected $table = 'sites';
198
-
199
- protected $fillable = ['site_name', 'site_url'];
200
-
201
-
202
-
203
- public function stores()
204
-
205
- {
206
-
207
- return $this->belongsToMany('App\Models\Store');
208
-
209
- }
210
-
211
-
212
-
213
- public function casts()
214
-
215
- {
216
-
217
- //withPivotで中間テーブルの値を取得
218
-
219
- return $this->belongsToMany('App\Models\Casts')->withPivot('site_email');
220
-
221
- }
222
-
223
- }
224
-
225
-
226
-
227
- ```
228
-
229
329
  cast_site テーブル
230
330
 
231
331
  |id|cast_id|site_id|site_email|

5

内容修正

2020/10/15 04:31

投稿

pup-ganbaru
pup-ganbaru

スコア29

test CHANGED
File without changes
test CHANGED
@@ -100,6 +100,12 @@
100
100
 
101
101
 
102
102
 
103
+ class CastController extends Controller
104
+
105
+ {
106
+
107
+
108
+
103
109
  public function create()
104
110
 
105
111
  {
@@ -112,6 +118,8 @@
112
118
 
113
119
  }
114
120
 
121
+ }
122
+
115
123
  ```
116
124
 
117
125
 

4

追記

2020/10/14 08:19

投稿

pup-ganbaru
pup-ganbaru

スコア29

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  複数のフォームから同時に送信して、中間テーブルのsite_emailカラムにデータを保存したい
6
6
 
7
- site_nameの数だけフォームを表示して中間テーブル(cast_site)のsite_emailにデータを保存したい
7
+ sitesテーブルデータの数だけフォームを表示して中間テーブル(cast_site)のsite_emailにデータを保存したい
8
8
 
9
9
 
10
10
 

3

タイトル変更 内容変更、情報追加

2020/10/14 08:18

投稿

pup-ganbaru
pup-ganbaru

スコア29

test CHANGED
File without changes
test CHANGED
@@ -8,6 +8,24 @@
8
8
 
9
9
 
10
10
 
11
+ 同時に送信した際に中間テーブルに
12
+
13
+ |id|cast_id|site_id|site_emai|
14
+
15
+ |:--|:--:|--:|
16
+
17
+ |1|1|1|hoge@gmail
18
+
19
+ |2|1|2|hoge1@gmail
20
+
21
+ |3|1|3|hoge2@gmail
22
+
23
+
24
+
25
+ このように保存されてほしいです。
26
+
27
+
28
+
11
29
  中間テーブルのリレーションはできています。
12
30
 
13
31
 

2

タイトル変更、情報追加

2020/10/14 08:15

投稿

pup-ganbaru
pup-ganbaru

スコア29

test CHANGED
@@ -1 +1 @@
1
- テーブルのデータ数に応じた複数送信できるフォーム作成したい
1
+ 複数のフォームから同時に送信して、中間テーブルのカラムにデータを保存したい
test CHANGED
@@ -1,31 +1,233 @@
1
- テーブルのデータ数に応じた複数送信できるフォームを作成したいと考えているのですが、viewでどのように取得したらよいか分からず、調べ方もわからないという状況なので質問させていただきました。
1
+ ### 前提・実現したい
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
- 以下site_emailのフォームをテーブル内のデータの数を取得してforeachにいれることで同じ数だけフォームを作成できるのかなとは思ったのですが、どのように記述すればよいかわかりませんでした。
2
+
10
-
11
-
12
-
3
+
4
+
13
- じnameだと配列でもしてない限り最後ものか送信されなということなので
5
+ 複数のフォームから送信して、中間テーブルsite_emailカラムにデータを保存
14
-
15
-
16
-
6
+
17
- for文でnameの変えるような記述が必要なでは?とか考えてるのですが知識不足で全然わかりません・・・
7
+ site_nameの数だけフォーム表示して中間テーブル(cast_site)site_emailにデータを保存した
18
-
19
-
20
-
8
+
9
+
10
+
21
- 一般的なやり方などあればご教示ただけますと幸いです
11
+ 中間テーブルのリレーションはできています。
12
+
13
+
14
+
15
+ ### 該当のソースコード
16
+
17
+
18
+
19
+ cast create.blade.php
20
+
21
+ ```ここに言語名を入力
22
+
23
+ <form action="{{ route('cast.create_confirm')}}" method='post'>
24
+
25
+ @csrf
26
+
27
+ <p>キャスト名</p>
28
+
29
+ <input type="text" name="cast_name" value="{{ old('cast_name')}}">
30
+
31
+ <p>パスワード</p>
32
+
33
+ <input type="text" name="cast_password" value="{{ old('cast_password')}}">
34
+
35
+
36
+
37
+ <p>連携サイトメールアドレス</p>
38
+
39
+ <!-- siteのIDとともにフォームを送信する必要がある。 -->
40
+
41
+ @foreach($sites as $site)
42
+
43
+ <!-- site_nameの数だけフォームを表示して中間テーブル(cast_site)のsite_emailにデータを保存したい -->
44
+
45
+ {{$site['site_name']}}
46
+
47
+ <input type="text" name="site_email" value="{{ old('site_email')}}">
48
+
49
+ @endforeach
50
+
51
+
52
+
53
+ <br>
54
+
55
+ <a href="{{ route('cast.index')}}">戻る</a>
56
+
57
+ <button type="submit">確認</button>
58
+
59
+ </form>
60
+
61
+ ```
62
+
63
+ CastControlller
22
64
 
23
65
  ```ここに言語を入力
24
66
 
67
+
68
+
25
- @foreach()
69
+ <?php
70
+
71
+
72
+
26
-
73
+ namespace App\Http\Controllers;
74
+
75
+
76
+
77
+ use App\Models\Cast;
78
+
79
+ use App\Models\Site;
80
+
81
+ use Illuminate\Http\Request;
82
+
83
+
84
+
85
+ public function create()
86
+
87
+ {
88
+
89
+ $sites = Site::all();
90
+
91
+ $site_count = Site::count();
92
+
27
- <input type="text" name="site_email" value="{{ old('site_email')}}">
93
+ return view('cast.create', ['site_count' => $site_count, 'sites' => $sites,]);
28
-
94
+
29
- @endforeach
95
+ }
30
-
96
+
31
- ```
97
+ ```
98
+
99
+
100
+
101
+ Cast.php
102
+
103
+ ```ここに言語を入力
104
+
105
+ <?php
106
+
107
+
108
+
109
+ namespace App\Models;
110
+
111
+
112
+
113
+ use Illuminate\Database\Eloquent\Factories\HasFactory;
114
+
115
+ use Illuminate\Database\Eloquent\Model;
116
+
117
+
118
+
119
+ class Cast extends Model
120
+
121
+ {
122
+
123
+ use HasFactory;
124
+
125
+ protected $table = 'casts';
126
+
127
+
128
+
129
+ public function sites()
130
+
131
+ {
132
+
133
+ return $this->belongsToMany('App\Models\Site');
134
+
135
+ }
136
+
137
+ }
138
+
139
+
140
+
141
+ ```
142
+
143
+
144
+
145
+ Site.php
146
+
147
+
148
+
149
+ ```ここに言語を入力
150
+
151
+ <?php
152
+
153
+
154
+
155
+ namespace App\Models;
156
+
157
+
158
+
159
+ use Illuminate\Database\Eloquent\Factories\HasFactory;
160
+
161
+ use Illuminate\Database\Eloquent\Model;
162
+
163
+
164
+
165
+ class Site extends Model
166
+
167
+ {
168
+
169
+ use HasFactory;
170
+
171
+ protected $table = 'sites';
172
+
173
+ protected $fillable = ['site_name', 'site_url'];
174
+
175
+
176
+
177
+ public function stores()
178
+
179
+ {
180
+
181
+ return $this->belongsToMany('App\Models\Store');
182
+
183
+ }
184
+
185
+
186
+
187
+ public function casts()
188
+
189
+ {
190
+
191
+ //withPivotで中間テーブルの値を取得
192
+
193
+ return $this->belongsToMany('App\Models\Casts')->withPivot('site_email');
194
+
195
+ }
196
+
197
+ }
198
+
199
+
200
+
201
+ ```
202
+
203
+ cast_site テーブル
204
+
205
+ |id|cast_id|site_id|site_email|
206
+
207
+ |:--|:--:|--:|
208
+
209
+ ||||
210
+
211
+
212
+
213
+ casts テーブル
214
+
215
+ |id|cast_name||
216
+
217
+ |:--|:--:|--:|
218
+
219
+ ||||
220
+
221
+
222
+
223
+ sites テーブル
224
+
225
+ |id|site_name||
226
+
227
+ |:--|:--:|--:|
228
+
229
+ ||||
230
+
231
+
232
+
233
+ かなりの情報量になってしまいましたが、よろしくお願いいたします。

1

内容変更

2020/10/14 08:07

投稿

pup-ganbaru
pup-ganbaru

スコア29

test CHANGED
@@ -1 +1 @@
1
- テーブルのデータ数に応じたフォームを作成したい。
1
+ テーブルのデータ数に応じた複数送信できるフォームを作成したい。
test CHANGED
@@ -1,4 +1,4 @@
1
- テーブルに入っているデータだけフォームを作成したいと考えているのですが、viewでどのように取得したらよいか分からず、調べ方もわからないという状況なので質問させていただきました。
1
+ テーブルデータ数に応じた複数送信できるフォームを作成したいと考えているのですが、viewでどのように取得したらよいか分からず、調べ方もわからないという状況なので質問させていただきました。
2
2
 
3
3
 
4
4
 
@@ -7,6 +7,14 @@
7
7
 
8
8
 
9
9
  以下site_emailのフォームをテーブル内のデータの数を取得してforeachにいれることで同じ数だけフォームを作成できるのかなとは思ったのですが、どのように記述すればよいかわかりませんでした。
10
+
11
+
12
+
13
+ 同じnameだと配列にでもしてない限り最後のものしか送信されないということなので
14
+
15
+
16
+
17
+ for文でnameの値を変えるような記述が必要なのでは?とか考えているのですが知識不足で全然わかりません・・・
10
18
 
11
19
 
12
20