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

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

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

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

phpMyAdmin

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

121閲覧

Target class [MemoTableSeeder] does not exist.の解決の仕方

hashikazu

総合スコア2

Laravel

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

phpMyAdmin

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2024/04/23 00:58

編集2024/04/23 04:43

実現したいこと

初心者です。
Laravelを使用して、以下のサイトを参考にメモアプリを作成したいです。

1)
https://qiita.com/Alesion30/items/95222f62904ef46f6f45
2)
https://qiita.com/Alesion30/items/97c3bd16c4e20d4bdb72

独学でやっているのですが、わからなくなってしまい、お手すきの際にご教授いただけますと幸いです...!
ご不明な点がございましたら、ご指摘いただけますと幸いです。

発生している問題・分からないこと

php artisan migrate --seed
を実行するとエラーが表示されました。

エラーメッセージ

error

1 INFO Nothing to migrate. 2 3 INFO Seeding database. 4 5 6 Illuminate\Contracts\Container\BindingResolutionException 7 8 Target class [MemoTableSeeder] does not exist. 9 10 at vendor\laravel\framework\src\Illuminate\Container\Container.php:906 11 902▕ 12 903▕ try { 13 904▕ $reflector = new ReflectionClass($concrete); 14 905▕ } catch (ReflectionException $e) { 15 ➜ 906▕ throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e); 16 907▕ } 17 908▕ 18 909▕ // If the type is not instantiable, the developer is attempting to resolve 19 910▕ // an abstract type such as an Interface or Abstract Class and there is 20 21 1 vendor\laravel\framework\src\Illuminate\Container\Container.php:904 22 ReflectionException::("Class "MemoTableSeeder" does not exist") 23 24 2 vendor\laravel\framework\src\Illuminate\Container\Container.php:904 25 ReflectionClass::__construct("MemoTableSeeder")

該当のソースコード

C:\xampp\htdocs\example

1<?php 2 3namespace Database\Seeders; 4 5// use Illuminate\Database\Console\Seeds\WithoutModelEvents; 6// use Illuminate\Database\Seeder; 7 8use Illuminate\Database\Seeder; 9use Illuminate\Database\Eloquent\Model; 10 11// 2024年4月21日追加 12use App\Models\Memo; 13 14class MemoTableSeeder extends Seeder 15{ 16 /** 17 * Run the database seeds. 18 */ 19 public function run() 20 { 21 DB::table('memo')->delete(); //最初に全件削除 22 23 Memo::create([ 24 'title' => '12/13 laravel勉強会', 'content' => 'データの読み取りと追加をやりました。' 25 ]); 26 27 Memo::create([ 28 'title' => '12/6 laravel勉強会', 'content' => 'Viewの表示をしました。' 29 ]); 30 } 31} 32

C:\xampp\htdocs\example

1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateMemoTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('memo', function (Blueprint $table) { 17 $table->bigIncrements('id'); 18 $table->string('title', 24); 19 $table->string('content', 60); 20 }); 21 } 22 23 /** 24 * Reverse the migrations. 25 * 26 * @return void 27 */ 28 public function down() 29 { 30 Schema::dropIfExists('memo'); 31 } 32}

C:\xampp\htdocs\example

1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Factories\HasFactory; 6use Illuminate\Database\Eloquent\Model; 7 8class Memo extends Model 9{ 10 // table名を指定 11 protected $table = 'memo'; 12 13 // カラムを指定 14 protected $fillable = [ 15 'id', 'title', 'content' 16 ]; 17 18 // created_atを使わない場合はfalseを指定する。 19 public $timestamps = false; 20} 21

C:\xampp\htdocs\example

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7class MemoController extends Controller 8{ 9 // home.blade.phpを表示 10 public function showHome() 11 { 12 return view('home'); 13 } 14 15 // submit.blade.phpを表示 16 public function showSubmit() 17 { 18 return view('submit'); 19 } 20} 21
APP_NAME=Laravel APP_ENV=local APP_KEY=base64:e9S30DLMWgdR+iDYsx7y3LRj73h6JujWMQ/mg9XijLQ= APP_DEBUG=true APP_TIMEZONE=UTC APP_URL=http://localhost APP_LOCALE=en APP_FALLBACK_LOCALE=en APP_FAKER_LOCALE=en_US APP_MAINTENANCE_DRIVER=file APP_MAINTENANCE_STORE=database BCRYPT_ROUNDS=12 LOG_CHANNEL=stack LOG_STACK=single LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mariadb DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=memoApp DB_USERNAME=root DB_PASSWORD= SESSION_DRIVER=database SESSION_LIFETIME=120 SESSION_ENCRYPT=false SESSION_PATH=/ SESSION_DOMAIN=null BROADCAST_CONNECTION=log FILESYSTEM_DISK=local QUEUE_CONNECTION=database CACHE_STORE=database CACHE_PREFIX= MEMCACHED_HOST=127.0.0.1 REDIS_CLIENT=phpredis REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=log MAIL_HOST=127.0.0.1 MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false VITE_APP_NAME="${APP_NAME}"
<?php namespace Database\Seeders; use App\Models\User; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { Model::unguard(); $this->call('MemoTableSeeder'); Model::reguard(); } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

以下のサイトを参考に、
https://qiita.com/kuma15/items/1687696bdd6be094c780

powershell

1composer dump-autoload

composerのリロード?を行ったのですが、エラーは変化ありませんでした。

以下のサイトを参考に
https://laracasts.com/discuss/channels/code-review/target-class-productseeder-does-not-exist
Laravelのバージョンの違いによる問題なのかなと思い、

PowerShell

1composer create-project laravel/laravel example-app1

を実行して、もう一度Laravelのアプリを作成して、デフォルトの名前空間の設定と、今の設定をチェックしたのですが、変わりありませんでした。

補足

XAMPPを使用しています。
PHP のバージョン: 8.2.12
Apache/2.4.58 (Win64)
サーバの種類: MariaDB
Laravel Installer 1.3.3
Laravel Framework 11.3.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

間違いの原因はDatabaseSeederなのに肝心のDatabaseSeederを質問に書いてない。

  • Laravelはバージョンアップで使い方が変わるので古い情報は一切役に立たない。読んではいけない。
  • 初心者が書いてるQiita記事はほとんどが間違いだらけ。絶対に読んではいけない。

当たり前の常識が頭の中にないからやってることを全部間違える。
その記事はLaravel7以前なので今読んでも時間の無駄。

php artisan migrate --seed実行時はseederを指定しなければDatabaseSeederが使われる。
Laravel11でのDatabaseSeederの書き方はこれ。User::factory()->create(はコメントにしてるけど必要なら戻す。DatabaseSeederとMemoTableSeederが同じ場所にあるからuseでのインポートは不要。

php

1<?php 2 3namespace Database\Seeders; 4 5use App\Models\User; 6 7// use Illuminate\Database\Console\Seeds\WithoutModelEvents; 8use Illuminate\Database\Seeder; 9 10class DatabaseSeeder extends Seeder 11{ 12 /** 13 * Seed the application's database. 14 */ 15 public function run(): void 16 { 17 // User::factory(10)->create(); 18 19 // User::factory()->create([ 20 // 'name' => 'Test User', 21 // 'email' => 'test@example.com', 22 // ]); 23 24 $this->call([ 25 MemoTableSeeder::class, 26 ]); 27 } 28}

記事では$this->call('MemoTableSeeder');ここが間違いの原因。
「バージョンアップで書き方が変わった」ではなくこの記事を書いた時点でもエラーなく動くけど間違ってる。
ドキュメントに$this->call('UserTableSeeder');で書かれてたのは5.0の遥か昔。
https://laravel.com/docs/5.0/migrations#database-seeding
5.1ではもう$this->call(UsersTableSeeder::class);
https://laravel.com/docs/5.1/seeding#calling-additional-seeders
Laravel7までは名前空間使ってなかったのでどっちでも同じ。ちょっとした書き方の違いでしかない。

Laravel8でseederが大きく変わったけど$this->call(UsersTableSeeder::class);で書いていれば簡単に移行できた。
何年もドキュメントに書かれてない変な書き方してる人のことなんて全く考慮してない。

XAMPPを使う、ドキュメントを読まずに古いQiita記事を読む、全部間違ってるので勉強方法の見直しが必須。

投稿2024/04/23 02:16

pcs

総合スコア374

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

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

hashikazu

2024/04/23 05:17

回答ありがとうございます! これからはドキュメントを読んでいこうと思います! 勉強方法の仕方について、調べもせずに進んでしまったと思いました。 https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d これからは、こういう記事を参考に進めていこうと思うのですが、おすすめの方法はございますでしょうか?
hashikazu

2024/04/23 10:56

DatabaseSeederを修正したら、エラーはなくなりました! このまま進んでもだめなので出直します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問