質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

1回答

555閲覧

【Laravel】カート内で商品個数変更【Ajax】

n____y

総合スコア0

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2023/03/20 08:51

実現したいこと

商品の個数をカート内で変更し、変更した数量に応じて表示する合計金額を変えたい。

前提

LaravelでECサイトを作っています。
その際、カート内で商品の数量を変更できるようにしたいです。

数量の変更はセレクトボックスで行い、その値をJavaScriptで取得して、それをajax通信によってデータベースに保存しています。(データベースに保存する理由は、カート内の商品情報をセッションで管理するためです。)

商品が一つの場合は成功するのですが、商品が複数あると、数量変更した際すべての商品の数量が、その商品の変更後の値として認識されて合計金額が算出されてしまいます。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

index.php

1<select name="change_quantity" data-productid="{{ $item->id }}" id=""> 2 <option value="1" {{ $item->pivot->quantity == 1 ? 'selected' : ''}}>1</option> 3 <option value="2" {{ $item->pivot->quantity == 2 ? 'selected' : ''}}>2</option> 4 <option value="3" {{ $item->pivot->quantity == 3 ? 'selected' : ''}}>3</option> 5 <option value="4" {{ $item->pivot->quantity == 4 ? 'selected' : ''}}>4</option> 6 <option value="5" {{ $item->pivot->quantity == 5 ? 'selected' : ''}}>5</option> 7 <option value="6" {{ $item->pivot->quantity == 6 ? 'selected' : ''}}>6</option> 8 <option value="7" {{ $item->pivot->quantity == 7 ? 'selected' : ''}}>7</option> 9 <option value="8" {{ $item->pivot->quantity == 8 ? 'selected' : ''}}>8</option> 10 <option value="9" {{ $item->pivot->quantity == 9 ? 'selected' : ''}}>9</option> 11</select> 12

script.js

1$('[name=change_quantity]').on('change', function () { 2 // 選択されているvalue属性値を取り出す 3 let val = $(this).val(); 4 let productid = $(this).data('productid'); 5 6 // valが空のとき、ここで処理を止める 7 if (!val) { 8 return false; 9 } 10 11 $.ajax({ 12 type: 'GET', 13 url: '/cart/change_quantity', // データを渡す先のルーティング 14 data: { 15 'quantity': val, 16 'productid': productid, 17 }, 18 dataType: 'json', 19 // headers: { 20 // 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 21 // }, 22 }) 23 .done(function (data) { 24 // document.getElementById('changed_cart__sub-total').textContent = '&#165;'+ data; 25 document.getElementById('changed_cart__sub-total').textContent = '¥' + data[0]; 26 document.getElementById('changed_cart__total-tax').textContent = '¥' + data[1]; 27 document.getElementById('changed_cart__tax-included-total').textContent = '¥' + data[2]; 28 }) 29 .fail(function () { 30 window.alert('エラー'); 31 }); 32}); 33

CartController.php

1 public function change_quantity(Request $request) { 2 $quantity = $request->quantity; 3 $productid = $request->productid; 4 $cart_id = Session::get('cart'); 5 // $line_item = LineItem::where('cart_id', $cart_id)->where('product_id', $productid)->first(); 6 $line_item = LineItem::where('cart_id', $cart_id)->where('product_id', $productid)->first(); 7 // dd($line_item); 8 9 $line_item->quantity = $quantity; 10 $line_item->save(); 11 12 $cart_id = Session::get('cart'); 13 $cart = Cart::find($cart_id); 14 $total_price = 0; 15 16 foreach ($cart->products as $product) { 17 $total_price += $product->price * $quantity; 18 } 19 20 $tax_rate = 0.1; 21 $total_tax = $total_price * $tax_rate; 22 $tax_included_total_price = floor($total_price + $total_tax); 23 24 return [$total_price, $total_tax, $tax_included_total_price, $productid]; 25 } 26

web.php

1 Route::get('/cart/change_quantity', 'CartController@change_quantity')->name('cart.change_quantity'); 2

試したこと

ajaxから送られてきた商品id($productid)をforeachで回すなどしてみましたがエラーになりました。

補足情報(FW/ツールのバージョンなど)

Laravel6、jQuery3.5.0を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

$total_price += $product->price * $quantity;

$quantity

$product->quantity
じゃないですか?

投稿2023/03/28 08:12

lightwill

総合スコア962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問