php artisan db:seedを実行すると、次のようなエラーメッセージが表示されます。
[ReflectionException] Class SongsTableSeeder does not exist
何が起こっている?
MyDatabaseSeederクラス:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->call('SongsTableSeeder');
}
}
MySongsTableSeederクラス:
<?php
// Composer: "fzaninotto/faker": "v1.4.0"
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;
use DB;
class SongsTableSeeder extends Seeder {
public function run()
{
$faker = Faker::create();
$songs = [];
foreach(range(1, 10) as $index)
{
$songs[] = ['title' => $faker->words(Rand(1,4))];
}
DB::table('songs')->insert($songs);
}
}
あなたはあなたがあなたのSongsTableSeeder.php
ファイルを持っているのと同じディレクトリにあるファイルDatabaseSeeder.php
にSongsTableSeeder
を入れる必要があります。
そしてあなたのコンソールで実行する必要があります。
composer dump-autoload
新しいクラスマップを生成して実行するには:
php artisan db:seed
私はちょうどそれをテストしました。 Laravel 5では問題なく動作しています。
私はこれをやって解決しました:
これは、ファイル名を変更したために起こりました。変更後になぜうまくいかなかったのか私にはわかりません。
ファイルSongsTableSeeder.phpは、database/seedsディレクトリまたはその下に置く必要があります。サブディレクトリ。
あなたが実行する必要があります:
composer dump-autoload
その後:
php artisan db:seed
または
php artisan db:seed --class=SongsTableSeeder
私は最新のLaravel 5 devリリースを実行しています。名前空間を変更した場合は、次のようにシードクラスを呼び出す必要があります。
$this->call('\todoparrot\TodolistTableSeeder');
todoparrot
を指定の名前空間に置き換える必要があることは明らかです。それ以外の場合、元の質問と同じエラーが表示されます。
composer dump-autoload
がcomposer.json
のautoload/classmapセクションと関連して機能することを忘れないでください。シーダーディレクトリを変更する必要がある場合、またはシーダーを格納するために複数のディレクトリを使用する必要がある場合は、この点に注意してください。
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
},
SongsTableSeeder.phpはdatabase/seedsディレクトリになければなりません
コンソールコマンドの手順
composer dump-autoload
その後:
php artisan cache:clear
その後:
php artisan optimize
その後:
php artisan db:seed
または
php artisan db:seed --class=SongsTableSeeder
CustomTableSeederがDatabaseSeederと同じディレクトリにある場合は、次のように使用します。
$this->call('database\seeds\CustomTableSeeder');
databaseSeederファイルに。 「DBクラスが見つかりません」というエラーが表示されたら、以下のようにCustomTableSeederファイルにDBファサードを追加します。
use Illuminate\Support\Facades\DB;
それは私のために働いた!
他のプロジェクトからseedersファイルをコピーした場合は、artisanコマンドphp artisan db:seed
を実行する必要があります。それ以外の場合は問題ありません。
以下の2つのクラスでは、SINGLE FILEのみを使用しました。
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\Lesson;
use Faker\Factory as Faker;
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//Lesson::truncate();
Model::unguard();
$this->call("LessonsTableSeeder");
}
}
class LessonsTableSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$faker = Faker::create();
foreach(range(1,30) as $index) {
Lesson::create(['title' => $faker->sentence(5), 'body' => $faker->paragraph(4)]);
}
}
}
[ReflectionException] Class Seeder does not exist
も取得し、composer dump-autoload
を使用すると、実行時にエラーpreg_match(): JIT compilation failed: no more memory
が発生しました。
php.iniで;pcre.jit=1
をpcre.jit=Off
に変更しました。ターミナルでphp --ini
を使用してパスを見つけることができます!
私はphp 7.3でMacを使用しています!皆さんの助けになることを願っています!
Laravelは "root"シーダークラスを必要とします:
職人用ヘルプページを参照してください。
$ php artisan help db:seed
Usage:
db:seed [options]
Options:
--class[=CLASS] The class name of the root seeder [default: "DatabaseSeeder"]
--database[=DATABASE] The database connection to seed
--force Force the operation to run when in production.
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Seed the database with records
DatabaseSeederを削除したい場合は、--class
オプションを使用してシーダークラスを定義する必要があります。