質問編集履歴

3

試したことの追記(関数myCartsの編集)

2020/12/31 09:41

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -38,10 +38,44 @@
38
38
 
39
39
  ### 該当のソースコード
40
40
 
41
-
41
+ ↓追記
42
42
 
43
43
  ```php
44
44
 
45
+ //ルーティング
46
+
47
+ //web.php
48
+
49
+
50
+
51
+ //(中略)
52
+
53
+ Route::get('/', 'ShopController@index');
54
+
55
+
56
+
57
+ Auth::routes();
58
+
59
+
60
+
61
+ Route::get('/mycart', 'ShopController@myCart')->middleware('auth');
62
+
63
+
64
+
65
+ Route::post('/mycart', 'ShopController@addMycart');
66
+
67
+
68
+
69
+ Route::get('/home', 'HomeController@index')->name('home');
70
+
71
+ ```
72
+
73
+
74
+
75
+
76
+
77
+ ```php
78
+
45
79
  //viewファイル
46
80
 
47
81
  //mycart.blade.php
@@ -490,6 +524,112 @@
490
524
 
491
525
 
492
526
 
527
+ ###試したこと追記3
528
+
529
+ hentaimanさんのコメントに基づき、関数myCartを書き換えました。
530
+
531
+ ```php
532
+
533
+ //ShopContoroller
534
+
535
+
536
+
537
+ //中略
538
+
539
+
540
+
541
+ public function addMycart(Request $request)
542
+
543
+ {
544
+
545
+ $user_id = Auth::id();
546
+
547
+ $stock_id=$request->stock_id;
548
+
549
+
550
+
551
+ $cart_add_info=Cart::firstOrCreate(['stock_id' => $stock_id,'user_id' => $user_id]);
552
+
553
+
554
+
555
+ if($cart_add_info->wasRecentlyCreated){
556
+
557
+ $message = 'カートに追加しました';
558
+
559
+ }
560
+
561
+ else{
562
+
563
+ $message = 'カートに登録済みです';
564
+
565
+ }
566
+
567
+
568
+
569
+ $carts = Cart::where('user_id',$user_id)->get();
570
+
571
+
572
+
573
+
574
+
575
+ return view('mycart',compact('carts' , 'message'));
576
+
577
+
578
+
579
+ }
580
+
581
+ //ここから
582
+
583
+ public function myCart(Request $request){
584
+
585
+ $user_id = Auth::id();
586
+
587
+ $carts = Cart::where('user_id',$user_id)->get();
588
+
589
+ //または↓
590
+
591
+ //$carts = Cart::all();
592
+
593
+
594
+
595
+ $stock_id=$request->input('stock_id', null)
596
+
597
+ $message = '';
598
+
599
+ if($stock_id === null){
600
+
601
+ $message = 'なにもしません';
602
+
603
+ }else{
604
+
605
+ $cart_add_info=Cart::firstOrCreate(['stock_id' => $stock_id,'user_id' => $user_id]);
606
+
607
+ if($cart_add_info->wasRecentlyCreated){
608
+
609
+ $message = 'カートに追加しました';
610
+
611
+ }else{
612
+
613
+ $message = 'カートに登録済みです';
614
+
615
+ }
616
+
617
+ }
618
+
619
+ return view('mycart',compact('carts' , 'message'));
620
+
621
+ }
622
+
623
+ //ここまで
624
+
625
+ ```
626
+
627
+ エディター上で「$message = '';」の部分にエラーがあると表示され、ページにアクセスすると
628
+
629
+ 「syntax error, unexpected '$message' (T_VARIABLE)」のエラーが表示されてしまいました。
630
+
631
+
632
+
493
633
 
494
634
 
495
635
 

2

試したことの追記2

2020/12/31 09:41

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -376,6 +376,120 @@
376
376
 
377
377
 
378
378
 
379
+ ###試したこと追記2
380
+
381
+ hentaimanさんのコメントを元に、「myCartでも同じようにパラメーターを受け取って``$cart_add_info``を作る」を実践しました。
382
+
383
+ ```php
384
+
385
+ //コントローラー
386
+
387
+ namespace App\Http\Controllers;
388
+
389
+
390
+
391
+ use Illuminate\Http\Request;
392
+
393
+ use Illuminate\Support\Facades\Auth;
394
+
395
+ use App\Models\Cart;
396
+
397
+ //中略
398
+
399
+ //↓(Request $request)を追記
400
+
401
+ public function myCart(Request $request) {
402
+
403
+ $my_carts = Cart::all();
404
+
405
+
406
+
407
+ //-----ここから追記-----
408
+
409
+ $user_id = Auth::id();
410
+
411
+ $stock_id=$request->stock_id;
412
+
413
+ $cart_add_info=Cart::firstOrCreate(['stock_id' => $stock_id,'user_id' => $user_id]);
414
+
415
+
416
+
417
+ if($cart_add_info->wasRecentlyCreated){
418
+
419
+ $message = 'カートに追加しました';
420
+
421
+ }
422
+
423
+ else{
424
+
425
+ $message = 'カートに登録済みです';
426
+
427
+ }
428
+
429
+
430
+
431
+ return view('mycart',compact('my_carts','message'));
432
+
433
+ }
434
+
435
+ //-----ここまで追記-----
436
+
437
+
438
+
439
+ public function addMycart(Request $request)
440
+
441
+ {
442
+
443
+ $user_id = Auth::id();
444
+
445
+ $stock_id=$request->stock_id;
446
+
447
+
448
+
449
+ $cart_add_info=Cart::firstOrCreate(['stock_id' => $stock_id,'user_id' => $user_id]);
450
+
451
+
452
+
453
+ if($cart_add_info->wasRecentlyCreated){
454
+
455
+ $message = 'カートに追加しました';
456
+
457
+ }
458
+
459
+ else{
460
+
461
+ $message = 'カートに登録済みです';
462
+
463
+ }
464
+
465
+
466
+
467
+ $carts = Cart::where('user_id',$user_id)->get();
468
+
469
+
470
+
471
+
472
+
473
+ return view('mycart',compact('my_carts' , 'message'));
474
+
475
+
476
+
477
+ }
478
+
479
+ ```
480
+
481
+ しかし、ページにアクセスすると下記のようなエラーが表示されます。
482
+
483
+ ```
484
+
485
+ SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'stock_id' cannot be null (SQL: insert into `carts` (`stock_id`, `user_id`, `updated_at`, `created_at`) values (?, 1, 2020-12-27 13:43:31, 2020-12-27 13:43:31))
486
+
487
+ ```
488
+
489
+ 根本的にやり方を間違えているのでしょうか。
490
+
491
+
492
+
379
493
 
380
494
 
381
495
 

1

試したことの追記

2020/12/27 13:48

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -238,6 +238,148 @@
238
238
 
239
239
 
240
240
 
241
+ ###試したこと追記
242
+
243
+ hentaimanさんの回答を元に、関数``myCart``のスコープ内に``$message = 'hogehoge';``と``return view('mycart',compact('my_carts','message'));``を記載したところ
244
+
245
+ 確かにエラーが出なくなりました。
246
+
247
+ ```php
248
+
249
+ //コントローラー
250
+
251
+ //ShopController.php
252
+
253
+ <?php
254
+
255
+
256
+
257
+ namespace App\Http\Controllers;
258
+
259
+
260
+
261
+ use App\Models\Stock;
262
+
263
+ use Illuminate\Http\Request;
264
+
265
+ use Illuminate\Support\Facades\Auth;
266
+
267
+ use App\Models\Cart;
268
+
269
+
270
+
271
+
272
+
273
+ class ShopController extends Controller
274
+
275
+ {
276
+
277
+
278
+
279
+ //中略
280
+
281
+ public function myCart()
282
+
283
+ {
284
+
285
+ $my_carts = Cart::all();
286
+
287
+ $message = 'hogehoge';//追記
288
+
289
+ return view('mycart',compact('my_carts','message'));//追記
290
+
291
+
292
+
293
+ }
294
+
295
+
296
+
297
+ public function addMycart(Request $request)
298
+
299
+ {
300
+
301
+ $user_id = Auth::id();
302
+
303
+ $stock_id=$request->stock_id;
304
+
305
+
306
+
307
+ $cart_add_info=Cart::firstOrCreate(['stock_id' => $stock_id,'user_id' => $user_id]);
308
+
309
+
310
+
311
+ if($cart_add_info->wasRecentlyCreated){
312
+
313
+ $message = 'カートに追加しました';
314
+
315
+ }
316
+
317
+ else{
318
+
319
+ $message = 'カートに登録済みです';
320
+
321
+ }
322
+
323
+
324
+
325
+ $carts = Cart::where('user_id',$user_id)->get();
326
+
327
+
328
+
329
+
330
+
331
+ return view('mycart',compact('my_carts','message'));
332
+
333
+ }
334
+
335
+ }
336
+
337
+ ```
338
+
339
+ ↓実際の画面
340
+
341
+ ![イメージ説明](6b0758c5520cbbf432c03e948e3d161b.png)
342
+
343
+
344
+
345
+ しかし、関数``addMycart``内に記述しているようなif文によって変数``message``の内容を変化させる方法がわかりません。
346
+
347
+
348
+
349
+ 関数``myCart``でも
350
+
351
+ ```php
352
+
353
+ if($cart_add_info->wasRecentlyCreated){
354
+
355
+ $message = 'カートに追加しました';
356
+
357
+ }
358
+
359
+ else{
360
+
361
+ $message = 'カートに登録済みです';
362
+
363
+ }
364
+
365
+ ```
366
+
367
+ のif文を使うとしたらどうすればいいかが思いつきません。
368
+
369
+
370
+
371
+ if文とその前後にコピーして関数``myCart``内に貼り付けたり、
372
+
373
+ 変数``message``をグローバル変数にしたりしましたが、
374
+
375
+ うまくいきませんでした。
376
+
377
+
378
+
379
+
380
+
381
+
382
+
241
383
 
242
384
 
243
385
  ### 補足情報(FW/ツールのバージョンなど)