前提
エラーが起きた内容が複雑なので分かりづらかったらご指摘頂けると助かります。
Laravelにてフリーマーケットサイトを作成していて自身が新しく商品を出品する際にエラーが起きています。
実現したいこと
商品関連でitemsテーブルを用意していて ユーザー側がname,description,category_id,price,imageカラムを書き換えられるようにしたいです。
ただ、そこで出品ボタンを押して更新しようとした際に画像のようなエラーが出てしまいデータベース側のエラーと思いorderテーブルに外部キー制約を設定し出品商品関連のテーブルであるitemsテーブルのidと繋げようとしたのですがエラーが発生しました。
質問なのですが、Laravel側のエラーは何が原因なのか、データベース側のphpmyadminでの外部キーが作成出来ないエラーの原因とやり方を教えて欲しいです。
発生している問題・エラーメッセージ
Class 'App\Http\Controllers\Categories' not found  
該当のソースコード
### コントローラー ```ItemsController.php(出品関連のコントローラー) <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Items; use App\User; use App\category; use App\Http\Requests\ItemsRequest; use App\Http\Requests\ItemsImageRequest; //use App\Http\Requests\ProfileImageRequest; use App\Services\FileUploadService; class ItemsController extends Controller { public function __construct() { $this->middleware('auth'); } public function index() { $items = Items::where('user_id', \Auth::user()->id)->get(); return view('users.index',[ 'title' => '出品商品一覧', 'items' => $items, ]); } //新規出品 public function create() { return view('items.create',[ 'title' => '商品を出品' ]); } public function store(ItemsRequest $request, FileUploadService $service) { // 画像投稿処理 $path = $this->saveImage($request->file('image')); $path= ''; $image = $request->file('image'); if(isset($image) === true ){ // publicディスク(storage/app/public/)のphotosディレクトリに保存 $path = $image->store('photos', 'public'); } Items::create([ 'user' => \Auth::user(), 'categories' => Categories::all(), 'description' => $request->description, 'image' => $path, //ファイルパスを保存 ]); session()->flash('success', '商品を出品しました'); return redirect()->route('users.exhibitions'); } // 購入詳細 public function show($id) { // } // 商品情報の編集 public function edit(Items $items) { return view('items.edit',[ 'title' => '出品編集', 'items' => $items, ]); } public function update(Request $request, $id) { $items = Items::find($id); $items->update($request->only(['description'])); session()->flash('success', '出品しました'); return redirect()->route('items.index'); } public function destroy($id) { $items = Items::find($id); $items ->delete(); \Session::flash('success', '商品を削除しました'); return redirect()->route('items.index'); } public function editImage($id) { $items = Items::find($id); return view('items.edit_image',[ 'title' => '画像変更処理', 'items' => $items, ]); } public function updateImage($id, ItemsImageRequest $request, FileUploadService $service) { //画像投稿処理 $path = ''; $image = $request->file('image'); if(isset($image) === true){ // publicディスク(storage/app/)のphotosディレクトリに保存 $path = $image->store('photos', 'public'); } $items = Items::find($id); // 変更前の画像の削除 if($items->image !== ''){ // publicディスクから、該当の投稿画像($user->image)を削除 \Storage::disk('public')->delete(\Storage::url($items->image)); } $items->update([ 'image' => $path, //ファイル名を保存 ]); session()->flash('success', '画像を変更しました!'); return redirect()->route('users.index', $id); } private function saveImage($image){ // 画像投稿処理 $path = ''; if(isset($image) === true){ // publicディスク(storage/app/)のphotosディレクトリに保存 $path = $image->store('photos', 'public'); } return $path;; // 画像が存在しない場合は空文字 } }
ビュー
create.blade.php(新規出品のビュー)
1@extends('layouts.top') 2 3@section('title', $title) 4 5@section('content') 6 <h1>{{ $title }}</h1> 7 <form method="POST" 8 action="{{ action('ItemsController@store') }}" 9 enctype="multipart/form-data"> 10 @csrf 11 <div> 12 <label> 13 商品名: 14 <input type="text" name="name"> 15 </label> 16 </div> 17 <div> 18 <label> 19 商品説明: 20 <input type="text" name="description"> 21 </label> 22 </div> 23 <div> 24 <label> 25 価格: 26 <input type="text" name="price"> 27 </label> 28 </div> 29 <div> 30 <label> 31 カテゴリー: 32 <input type="text" name="categories"> 33 </label> 34 </div> 35 <div> 36 <label> 37 画像を選択: 38 <input type="file" name="image"> 39 </label> 40 </div> 41 <input type="submit" value="出品"> 42 </form> 43@endsection
index.blade.php(出品一覧のビュー)
1@extends('layouts.top') 2 3@section('title', $title) 4 5@section('content') 6 <h1>{{ $title }}</h1> 7 <a href="{{route('items.create')}}">新規出品</a> 8 <ul> 9 @forelse($items as $item) 10 <li class="items"> 11 <div class="items_content"> 12 <div class="items_body_heading"> 13 <div class="items_body_main_img"> 14 @if($items->image !== '') 15 <img src="{{ asset('storage/' . $items->image) }}"> 16 @else 17 <img src="{{ asset('images/no_image.png') }}"> 18 @endif 19 </div> 20 <div class="items_body_main_comment"> 21 {{ $items->description }} 22 </div> 23 </div> 24 <div class="items_body_main"> 25 商品名:{{ $items->name }} 26 {{ $items->price }} 27 </div> 28 <div class="items_category"> 29 カテゴリ:{{ $items->category_id }} 30 ({{ $items->created_at }}) 31 </div> 32 <div class="items_body_footer"> 33 [<a href="{{ route('items.edit', $items) }}">編集</a>] 34 <form class="delete" method="post" action="{{ route('items.destroy', $items) }}"> 35 @csrf 36 @method('DELETE') 37 <input type="submit" value="削除"> 38 </div> 39 </div> 40 </li> 41 @empty 42 <li>出品している商品はありません。</li> 43 @endforelse 44 </ul> 45@endsection
クラス・マイグレーションファイル
items.php(商品用のitemクラス)
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Items extends Model 8{ 9 protected $fillable = [ 10 'name', 'description', 'category_id', 'price' 11 ]; 12} 13
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateItemsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('items', function (Blueprint $table) { $table->bigIncrements('id'); // usersのidと同じデータ型に設定する // bigIncrementsで設定されるデータ型はunsignedBigInteger $table->unsignedBigInteger('user_id'); $table->string('name', 255); $table->string('description', 1000); $table->string('image', 100); $table->timestamps(); $table->integer('price')->unsigned(); // user_id は users の id に対して外部キー制約を設定 $table->foreign('user_id')->references('id')->on('users')->onDelte('cascade'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('items'); } }
categories.php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6use Illuminate\Database\Eloquent\softDeletes; 7 8class categories extends Model 9{ 10 use SoftDeletes; 11 12 protected $primaryKey = 'category_id'; 13 protected $fillable = ['name', 'display_order']; 14 protected $dates = ['deleted_at', 'created_at', 'updated_at']; 15 16 /** 17 * カテゴリリストを取得する 18 * 19 * @param int $num_per_page 1ページ当たりの表示件数 20 * @param string $order 並び順の基準となるカラム 21 * @param string $direction 並び順の向き asc or desc 22 * @return mixed 23 */ 24 public function getCategoryList(int $num_per_page = 0, string $order = 'display_order', string $direction = 'asc') 25 { 26 $query = $this->orderBy($order, $direction); 27 if ($num_per_page) { 28 return $query->paginate($num_per_page); 29 } 30 return $query->get(); 31 } 32} 33
補足情報(FW/ツールのバージョンなど)
Windows10 cloud9 Laravel6_v1

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/16 01:56
2022/12/16 03:12
2022/12/16 04:09
2022/12/16 05:46
2022/12/16 06:44
2022/12/16 06:52
2022/12/16 06:54 編集
2022/12/16 09:27