Laravel 5 - seed artisan [ReflectionException] Kelas SongsTableSeeder tidak ada

275

Ketika saya menjalankan php artisan db: seed saya mendapatkan kesalahan berikut:

[ReflectionException] Class SongsTableSeeder does not exist

Apa yang sedang terjadi?

Kelas DatabaseSeeder saya :

<?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');
    }

}

Kelas SongsTableSeeder Saya :

<?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);

    }

}
Sasha
sumber
108
composer dump-autoload?
Thomas Jensen
Saya pikir menggunakan Faker \ Factory sebagai Faker; sedang melakukan pekerjaan?
Sasha
Apa jalur ke file yang berisi SongsTableSeederdefinisi kelas?
Wouter J
Ini dump dan buruk
Luigi Lopez

Jawaban:

750

Anda perlu memasukkan SongsTableSeederfile ke SongsTableSeeder.phpdirektori yang sama dengan DatabaseSeeder.phpfile Anda .

Dan Anda perlu menjalankan di konsol Anda:

composer dump-autoload

untuk menghasilkan peta kelas baru dan kemudian jalankan:

php artisan db:seed

Saya baru saja mengujinya. Ini berfungsi tanpa masalah di Laravel 5

Marcin Nabiałek
sumber
1
Saya belum 'menggunakan' model di kelas seeder saya. Sekarang berfungsi dengan baik.
Jamie Poole
1
composer dumpautoloadjuga terbang
Connor Leech
komposer dump-autoload memecahkan masalah bagi saya. apa sebenarnya komposer dump-autoload?
Luís Almeida
5
@ LuísAlmeida dump-autoloadmeregenerasi daftar semua kelas yang perlu dimasukkan dalam proyek, ini digunakan ketika Anda memiliki kelas baru di dalam proyek Anda. Menjalankan normal make:*akan menambahkan kelas yang baru dibuat, tetapi ini tidak akan terjadi jika Anda secara manual membuat seeder. Setidaknya begitulah cara saya memahaminya bekerja dari 5 menit pencarian. Saya bukan ahli.
Xander Luciano
Saya mencoba solusi ini dengan Laravel 5.8 pada server pengembangan dan composer dump-autoloadbekerja untuk saya.
Proyek Mycoding
19

Saya menyelesaikannya dengan melakukan ini:

  1. Salin konten file.
  2. Hapus file.
  3. Jalankan perintah: php artisan make: seeder.
  4. Salin konten file kembali ke file ini.

Ini terjadi karena saya membuat perubahan pada nama file. Saya tidak tahu mengapa itu tidak berhasil setelah perubahan.

Ron van Asseldonk
sumber
2
Mungkin menjalankan dump-auto komposer lebih mudah. Autoloader sekarang mencari file yang lebih lama. Jadi jika Anda membuang file ini melalui baris perintah, itu akan menghasilkan file autoloader baru dengan file baru. Jadi di masa depan coba ini =)
Ron van Asseldonk
Untuk informasi lebih lanjut tentang komposer autoloader lihat situs ini: getcomposer.org/doc/01-basic-usage.md#autoloading
Ron van Asseldonk
van Asseldok, yah, composer dump-autoloadtidak bekerja untuk saya. Saya harus membuat ulang kelas seeder agar berfungsi.
М.Б.
Ini membantu saya. 'komposer dump-autoload' tidak berfungsi untuk saya juga, ada hubungannya dengan pengaturan server saya, atau fakta bahwa itu adalah pembagian yang dibagi.
Derk Jan Speelman
16

File SongsTableSeeder.php harus dalam direktori database / seed atau dalam subdirektori.

Anda perlu menjalankan:

composer dump-autoload

lalu:

php artisan db:seed

atau:

php artisan db:seed --class=SongsTableSeeder
simhumileco
sumber
1
dapat melihat Parse Error dengan perintah 'php artisan db: seed --class = SongsTableSeeder'. terima kasih !!
OmiK
4

SongsTableSeeder.php harus dalam direktori database / seed

Langkah-langkah perintah konsol:

composer dump-autoload

lalu:

php artisan cache:clear

lalu:

php artisan optimize

lalu:

php artisan db:seed

atau:

php artisan db:seed --class=SongsTableSeeder
Chandrakant Ganji
sumber
Bekerja untukku! Terutama php artisan optimizebagian
Musa Ndeda
3

Saya sedang menjalankan rilis dev Laravel 5 terbaru, dan jika Anda telah mengubah namespace Anda harus memanggil kelas seed Anda seperti ini:

$this->call('\todoparrot\TodolistTableSeeder');

Tentunya Anda harus mengganti todoparrotdengan namespace yang ditunjuk. Kalau tidak, saya menerima kesalahan yang sama ditunjukkan dalam pertanyaan asli.

Jason
sumber
3

Jangan lupa bahwa composer dump-autoloadkerjanya terkait dengan bagian autoload / classmap composer.json. Berhati-hatilah jika Anda perlu mengubah direktori seeder atau menggunakan beberapa direktori untuk menyimpan seeder.

"autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
},
Abenevaut
sumber
0

Jika CustomTableSeeder kami berada di direktori yang sama dengan DatabaseSeeder, kita harus menggunakan seperti di bawah ini:

$this->call('database\seeds\CustomTableSeeder');

dalam File DatabaseSeeder kami; kemudian kesalahan lain akan muncul yang mengatakan: 'Kelas DB tidak ditemukan' maka kita harus menambahkan fasad DB kami ke File CustomTableSeeder kami seperti di bawah ini:

use Illuminate\Support\Facades\DB;

itu berhasil untuk saya!

ivahidmontazer
sumber
0

Saya hanya menggunakan FILE TUNGGAL dengan DUA kelas di dalamnya sebagai berikut:

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)]);

    }

}

}
Vinod Joshi
sumber
0

Jika Anda telah menyalin file seeder dari proyek lain, maka Anda perlu menjalankan perintah artisan php artisan db:seedjika tidak, tidak masalah.

Shahid Hussain
sumber
0

saya mendapat [ReflectionException] Class Seeder does not existterlalu dan ketika saya menggunakan composer dump-autoload, saya mendapat kesalahanpreg_match(): JIT compilation failed: no more memory ketika saya menjalankannya.

Apa yang saya lakukan adalah saya mengganti ;pcre.jit=1ke pcre.jit=Offdalam php.ini ! Anda dapat menemukan jalur dengan menggunakan php --inidi terminal Anda!

Saya menggunakan mac dengan php 7.3! Semoga itu bisa membantu kalian semua di luar sana!

gerald heng
sumber
0

Anda mungkin menentukan .phpekstensi dan itu tidak menemukan kelas Anda.

Apa yang saya lakukan:

php artisan db:seed --class=RolesPermissionsTableSeeder.php

Apa yang memecahkan masalah saya: Apa yang saya lakukan:

php artisan db:seed --class=RolesPermissionsTableSeeder
Axel Paris
sumber
-5

Saya memiliki kesalahan "pengecualian refleksi" yang sama. Solusinya adalah menyalin file kelas ke server, dari dev, untuk saya. kesalahan bodoh, tetapi mengingat berapa banyak file yang kita berurusan dengan mudah lupa untuk menyalinnya ke server setiap waktu.

JamesAD-0
sumber
2
Tanggapan ini sangat kabur dan ditambah dengan pengaturan hosting khusus Anda. Meskipun input Anda dihargai, ini mungkin tidak membantu pengembang mencari solusi untuk masalah ini. Saya pikir masalah Anda disebabkan oleh Anda menyerahkannya kepada manusia untuk menyalin file ke server. Ini didorong untuk memiliki pipa CI di mana file secara otomatis digunakan ke server :)
charj