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

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

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

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

phpMyAdmin

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

0回答

507閲覧

Laravelのフリーマーケットサイト作成での商品購入機能について

takigawa777

総合スコア21

Laravel 6

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

phpMyAdmin

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2022/12/19 14:29

前提

Laravelにてフリーマーケットサイトを作成しています。
そこで出品商品一覧画面や新規商品を作るビューなどは作ることに成功しました。

実現したいこと

タイトルに書いたように、商品を買いたい場合の購入処理の書き方が自力で調べても分からないので教えてほしいです。
購入用の処理やボタンは商品詳細ビューのshow.bladeに実装したいです。

該当のソースコード

ルーティング

web.php(ルーティング)

1<?php 2 3/* 4|-------------------------------------------------------------------------- 5| Web Routes 6|-------------------------------------------------------------------------- 7| 8| Here is where you can register web routes for your application. These 9| routes are loaded by the RouteServiceProvider within a group which 10| contains the "web" middleware group. Now create something great! 11| 12*/ 13Auth::routes(); 14// トップページをログイン画面後に表示させたい場合はmiddlewareを書かないとエラーが出る 15Route::get('/', function () { 16 return view('layouts.top'); 17})->middleware('auth'); 18// お気に入り一覧 19Route::resource('likes', 'LikesController')->only([ 20 'index', 'store', 'destroy' 21]); 22 23Route::resource('items', 'ItemsController'); 24 25Route::resource('profile', 'ProfileController')->only([ 26 'store', 'destroy' 27]); 28Route::get('users/index', 'ItemsController@index')->name('users.index'); 29 30 31Route::get('/items/{id}/edit_image', 'ItemsController@editImage')->name('items.edit_image'); 32 33Route::patch('/items/{id}/edit_image', 'ItemsController@editImage')->name('items.update_image'); 34 35Route::get('/profile/{id}/edit', 'ProfileController@edit')->name('profile.edit'); 36Route::patch('/profile/{id}', 'ProfileController@update')->name('profile.update'); 37Route::get('/profile/{id}/edit_image', 'ProfileController@editImage')->name('profile.edit_image'); 38Route::patch('/profile/{id}/edit_image', 'ProfileController@updateImage')->name('profile.update_image'); 39 40Route::resource('profile', 'ProfileController')->only([ 41 'show', 42]); 43

コントローラー

ItemsController.php(出品関連のコントローラー)

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Item; 7use App\User; 8use App\category; 9use App\Http\Requests\ItemsRequest; 10use App\Http\Requests\ItemsImageRequest; 11//use App\Http\Requests\ProfileImageRequest; 12use App\Services\FileUploadService; 13 14class ItemsController extends Controller 15{ 16 public function __construct() 17 { 18 $this->middleware('auth'); 19 } 20 21 public function index() 22 { 23 $items = Item::where('user_id', \Auth::user()->id)->get(); 24 return view('users.index',[ 25 'title' => '出品商品一覧', 26 'items' => $items, 27 ]); 28 } 29 30 //新規出品 31 public function create() 32 { 33 return view('items.create',[ 34 'title' => '商品を出品' 35 ]); 36 } 37 //store の中に requestを書く事でリクエストフォームからデータを引っ張ってくる 38 public function store(ItemsRequest $request, FileUploadService $service) 39 { 40 // 画像投稿処理 41 $path = $this->saveImage($request->file('image')); 42 $path= ''; 43 $image = $request->file('image'); 44 if(isset($image) === true ){ 45 // publicディスク(storage/app/public/)のphotosディレクトリに保存 46 $path = $image->store('photos', 'public'); 47 } 48 // テーブルに存在する左側の項目に何を入れるか→リクエストフォーム($request)からname,descriptionなど 49 Item::create([ 50 'user_id' => \Auth::user()->id, 51 'name' => $request->name, 52 'description' => $request->description, 53 'category_id' => $request->category_id, 54 'price' => $request->price, 55 'image' => $path, //ファイルパスを保存 56 ]); 57 session()->flash('success', '商品を出品しました'); 58 return redirect()->route('users.index'); 59 } 60 61 // 購入詳細 62 public function show($id) 63 { 64 // 65 } 66 67 // 商品情報の編集 68 public function edit(Items $items) 69 { 70 return view('items.edit',[ 71 'title' => '出品編集', 72 'items' => $items, 73 ]); 74 } 75 76 public function update(Request $request, $id) 77 { 78 $items = Item::find($id); 79 $items->update($request->only(['description'])); 80 session()->flash('success', '出品しました'); 81 return redirect()->route('items.index'); 82 } 83 84 public function destroy($id) 85 { 86 $items = Item::find($id); 87 $items ->delete(); 88 \Session::flash('success', '商品を削除しました'); 89 return redirect()->route('items.index'); 90 } 91 92 public function editImage($id) 93 { 94 $items = Item::find($id); 95 return view('items.edit_image',[ 96 'title' => '画像変更処理', 97 'items' => $items, 98 ]); 99 } 100 101 public function updateImage($id, ItemsImageRequest $request, FileUploadService $service) 102 { 103 104 //画像投稿処理 105 $path = ''; 106 $image = $request->file('image'); 107 108 if(isset($image) === true){ 109 // publicディスク(storage/app/)のphotosディレクトリに保存 110 $path = $image->store('photos', 'public'); 111 } 112 113 $items = Item::find($id); 114 115 // 変更前の画像の削除 116 if($items->image !== ''){ 117 // publicディスクから、該当の投稿画像($user->image)を削除 118 \Storage::disk('public')->delete(\Storage::url($items->image)); 119 } 120 121 $items->update([ 122 'image' => $path, //ファイル名を保存 123 ]); 124 125 session()->flash('success', '画像を変更しました!'); 126 return redirect()->route('users.index', $id); 127 } 128 129 private function saveImage($image){ 130 // 画像投稿処理 131 $path = ''; 132 if(isset($image) === true){ 133 // publicディスク(storage/app/)のphotosディレクトリに保存 134 $path = $image->store('photos', 'public'); 135 } 136 return $path;; // 画像が存在しない場合は空文字 137 } 138 139} 140

ビュー

show.blade.php(商品詳細ビュー)

1@extends('layouts.top') 2 3@section('title', $title) 4 5@section('content') 6 <h1>{{ $title }}</h1> 7@endsection

試したこと

ここに問題に対して試したことを記載してください。

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

Windows10 Laravel6_v1 cloud9

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

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

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

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

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

m.ts10806

2022/12/20 04:19 編集

>自力で調べても分からない どのように調べて何を確認してなにを試したのか具体的に記載してください。 ショッピングカートの仕組み等であればどこにもなにもないとは思えません。 自分がやりたいことそのままが落ちてることはまずないので、参考にしつつ取り込んでいくしかないように思いますし、そもそも関係性のある情報がたくさんあるので、具体的な設計なしには実装無理だと思います。 普通にスーパーマーケットなどの商店に買いに行ったときの客がどういう動きするとか、 自身が使ったことのあるECサイトの動作や処理が何も参考にならなかったのでしょうか。 同じことを繰り返すことになりますが、「手段」だけ追い求めてもモノは出来ません。 「自分(というか本来は一般ユーザー)が使って不自然でない機能、導線をきちんと設計する」のが最優先です。
phper.k

2022/12/20 03:46

通常ECサイトでは、欲しいものを一旦「カート」に入れて複数のものを一度に決済する流れになるはずですが、あなたは「商品」ごとに「購入」する仕様にするんですか? そうなると、複数の商品を購入する場合、商品を個別に決済するということになりませんんか? 「購入」についての仕様が明確でないため、この辺りを明確にした上で質問し直してください。
takigawa777

2022/12/20 16:02

カートは必要なく、商品詳細ページで購入ボタンを押したら購入扱いになり「購入する」から「売り切れ」に変わる仕様です。 再度質問を投稿しましたが、補足したにも関わらず何故かまた指摘を受けたので削除しようと思います。
phper.k

2022/12/21 01:56

items テーブルに is_stocked (在庫)カラムでも作って、0, 1 で管理すればいいんじゃないですかね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問