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

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

新規登録して質問してみよう
ただいま回答率
85.54%
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

1回答

686閲覧

Laravelでのデータベースによる管理でのphpmyadminに関するエラーについて

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/15 13:58

編集2022/12/16 13:47

前提

エラーが起きた内容が複雑なので分かりづらかったらご指摘頂けると助かります。
Laravelにてフリーマーケットサイトを作成していて自身が新しく商品を出品する際にエラーが起きています。

実現したいこと

商品関連でitemsテーブルを用意していて ユーザー側がname,description,category_id,price,imageカラムを書き換えられるようにしたいです。
ただ、そこで出品ボタンを押して更新しようとした際に画像のようなエラーが出てしまいデータベース側のエラーと思いorderテーブルに外部キー制約を設定し出品商品関連のテーブルであるitemsテーブルのidと繋げようとしたのですがエラーが発生しました。
質問なのですが、Laravel側のエラーは何が原因なのか、データベース側のphpmyadminでの外部キーが作成出来ないエラーの原因とやり方を教えて欲しいです。

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

Class 'App\Http\Controllers\Categories' not found ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-15/1230a513-1c39-4e24-ab09-190faec43b28.png) ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-15/1a288417-66b2-442d-bd6d-30bbe94710df.png)

該当のソースコード

### コントローラー ```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

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

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

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

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

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

guest

回答1

0

diff

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6+ use App\Categories; // モデルは普通、単数系のはずだが。エラー見る限りこう判断するしかない 7use App\Items; 8use App\User; 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{ 17 18 public function __construct() 19 20 { 21 22 $this->middleware('auth'); 23 24 } 25

投稿2022/12/16 00:09

編集2022/12/16 00:11
phper.k

総合スコア3923

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

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

takigawa777

2022/12/16 01:56

回答ありがとうございます。 すみません、アドバイス通り追記したのですが質問画像と同じエラーが出てしまいました。
phper.k

2022/12/16 03:12

カテゴリモデルの定義はどうなっているの?
takigawa777

2022/12/16 04:09

どうなってるとはどういう事でしょうか?
phper.k

2022/12/16 05:46

Class 'App\Http\Controllers\Categories' not found エラーメッセージがこうなっているんだから、そのカテゴリモデルファイルがどうなっているのかわからんと回答できないでしょう
takigawa777

2022/12/16 06:44

すみません、追記しました。
phper.k

2022/12/16 06:52

class categories extends Model ご自身で categories と全て小文字で作っているじゃない?
takigawa777

2022/12/16 09:27

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.54%

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

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

質問する

同じタグがついた質問を見る

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の利用が可能になります。