こんにちは。
フォームに入力した内容をデータベースにアップロードして一覧表示できるようにしたいのですが、以下のエラーが表示されます。
フォームを送信しようとすると、
403 This action is unauthorized.
このエラーが表示され、ページを更新すると
BadMethodCallException
Call to undefined method App\Models\User::products()
http://localhost:8000/products
このエラーに切り替わります。
データベースにusersテーブルとproductsテーブルがあり、productsテーブルがusersテーブルの従テーブルになっています。フォームをアップロードするときにユーザーidも登録されるようにし、一覧表示するときはユーザーidをもとに、商品を一覧表示できるようにしたいです。
web.php
php
1 Route::get('/product/create', 'ProductController@create'); //productの作成 2 Route::post('/product', 'ProductController@store'); //productの追加 3 Route::get('/product', 'ProductController@index'); //productの表示
web.php
php
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Product; 7use Illuminate\Support\Facades\Auth; 8use App\Http\Requests\ProductRequest; 9 10class ProductController extends Controller 11{ 12 public function index() 13 { 14 $products = Auth::user()->products()->get(); 15 16 return view('product.show')->with(['products' => $products]); 17 } 18 19 public function create() 20 { 21 return view('product.create'); 22 } 23 24 public function store(ProductRequest $request) 25 { 26 $product = new Product; 27 $product->user_id = $request->user()->id; 28 $product->name = $request->name; 29 $product->price = $request->price; 30 $product->description = $request->description; 31 $product->category_id = $request->category_id; 32 if ($request->hasFile('image')) { 33 $path = $request->file('image')->store('public/product'); 34 $product->image = basename($path); 35 } 36 $product->save(); 37 return redirect('/product/create'); 38 } 39}
create.blade.php
php
1 <div class="col-md-9"> 2 @if ($errors->any()) 3 <div class="alert alert-danger"> 4 <ul> 5 @foreach ($errors->all() as $error) 6 <li>{{ $error }}</li> 7 @endforeach 8 </ul> 9 </div> 10 @endif 11 @if (session()->has('message')) 12 <div class="alert alert-success"> 13 <ul> 14 <li>{{ session()->get('message') }}</li> 15 </ul> 16 </div> 17 @endif 18 <div class="card card-primary"> 19 <div class="card-header">メニューの登録</div> 20 <div class="card-body"> 21 <form action="/product" method="post" enctype="multipart/form-data"> 22 {{ csrf_field() }} 23 <p><label>商品<br> 24 <input class="form-control" type="text" name="name" value="{{ old('name') }}"> 25 </label></p> 26 <p><label>値段<br> 27 <input class="form-control" type="text" name="price" value="{{ old('price') }}"> 28 </label></p> 29 <p><label>説明<br> 30 <textarea class="form-control" name="description" value="{{ old('description') }}" rows="6"></textarea> 31 </label></p> 32 <p><label>カテゴリー<br> 33 <select type="text" name="category_id" value="{{ old('category_id') }}"> 34 @foreach(config('category') as $key => $score) 35 <option value="{{ $key }}">{{ $score }}</option> 36 @endforeach 37 </select> 38 </label></p> 39 <p><label>画像<br> 40 <input type="file" name="image"> 41 </label></p> 42 <p><button type="submit" class="btn btn-success">登録</button></p> 43 </form> 44 </div> 45 </div> 46 </div>
リレーションがうまくできていない気がしているのですが、原因がわかる方いらっしゃいましたらご教授お願いいたします。よろしくお願いします。
あなたの回答
tips
プレビュー