Laravel 5 - esnaf tohumu [ReflectionException] Sınıf ŞarkılarıTableSeeder mevcut değil


275

Ben php artisan db çalıştırmak : tohum aşağıdaki hatayı alıyorum:

[ReflectionException] Class SongsTableSeeder does not exist

Ne oluyor?

Benim DatabaseSeeder sınıfı:

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

}

Benim SongsTableSeeder sınıfı:

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

    }

}

108
composer dump-autoload?
Thomas Jensen

Faker \ Factory'yi Faker olarak kullanmayı düşündüm ; işi yapıyor mu?
Sasha

SongsTableSeederSınıf tanımını içeren dosyanın yolu nedir ?
Wouter J


Bu dökümü ve kötü
Luigi Lopez

Yanıtlar:


750

Sen koymak gerekir SongsTableSeederdosyasına SongsTableSeeder.phpsize sahip aynı dizinde DatabaseSeeder.phpdosyayı.

Ve konsolunuzda çalıştırmanız gerekiyor:

composer dump-autoload

yeni sınıf haritası oluşturmak ve daha sonra çalıştırmak için:

php artisan db:seed

Sadece test ettim. Laravel 5'de sorunsuz çalışıyor


1
Mibzer sınıfımda modeli 'kullanmıyordum'. Şimdi iyi çalışıyor.
Jamie Poole

1
composer dumpautoloadAyrıca uçar
Connor Leech

besteci dökümü-autoload problemi bana çözdü. ne besteci dökümü otomatik yük gerçekten yapar?
Luís Almeida

5
@ LuísAlmeida dump-autoload, projeye dahil edilmesi gereken tüm sınıfların listesini yeniden oluşturur, projenizde yeni bir sınıfınız olduğunda kullanılır. Normalde çalışan make:*yeni oluşturulan sınıfı ekler, ancak el ile bir ekici oluşturursanız bu gerçekleşmez. En azýndan 5 dakika aramayla çalýţmasýný anlýyorum. Ben uzman değilim.
Xander Luciano

Bu çözümü Laravel 5.8 ile bir geliştirme sunucusunda denedim ve composer dump-autoloadbenim için çalıştım.
Mycodingproject

19

Bunu yaparak çözdüm:

  1. Dosya içeriğini kopyalayın.
  2. Dosyayı kaldır.
  3. Çalıştır komutu: php artisan make: seeder.
  4. Dosya içeriğini bu dosyaya kopyalayın.

Bu, dosya adında bir değişiklik yaptığım için oldu. Değişimden sonra neden işe yaramadığını bilmiyorum.


2
Muhtemelen besteci dökümü otomatik olarak çalıştırmak daha kolaydı. Otomatik yükleyici şimdi daha eski bir dosya arıyor. Bu nedenle, bu dosyayı komut satırı aracılığıyla dökerseniz, yeni dosyayla yeni bir otomatik yükleyici dosyası oluşturur. Gelecekte bunu deneyin =)
Ron van Asseldonk

Besteci otomatik yükleyici hakkında daha fazla bilgi için şu siteye bakın: getcomposer.org/doc/01-basic-usage.md#autoloading
Ron van Asseldonk

van Asseldok, composer dump-autoloadbenim için çalışmıyor. Çalışmasını sağlamak için ekme makinesi sınıfını yeniden oluşturmalıyım.
М.Б.

Bu bana yardımcı oldu. 'composer dump-autoload' benim için de çalışmıyor, sunucu ayarlarımla ilgili bir şey veya bunun paylaşılan bir sunucu olması.
Derk Jan Speelman

16

SongsTableSeeder.php dosyası veritabanında / tohumda olmalıdır dizininde veya alt dizininde olmalıdır.

Çalıştırmanız gerekiyor:

composer dump-autoload

ve sonra:

php artisan db:seed

veya:

php artisan db:seed --class=SongsTableSeeder

1
'php artisan db: seed --class = SongsTableSeeder' komutuyla Ayrıştırma Hatasını görebilme . thnks !!
OmiK

4

SongsTableSeeder.php veritabanı / tohumlar dizininde olmalıdır

Konsol komut adımları:

composer dump-autoload

ve sonra:

php artisan cache:clear

ve sonra:

php artisan optimize

ve sonra:

php artisan db:seed

veya:

php artisan db:seed --class=SongsTableSeeder

Benim için çalıştı! Özellikle php artisan optimizebölüm
Moses Ndeda

3

En son Laravel 5 dev sürümünü çalıştırıyorum ve ad alanını değiştirdiyseniz, tohum sınıfınızı şöyle çağırmanız gerekir:

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

Açıkçası todoparrot, belirlenmiş ad alanınızla değiştirmeniz gerekecektir . Aksi takdirde orijinal soruda belirtilenle aynı hatayı alıyorum.


3

composer dump-autoloadOto yük / sınıf haritası bölümü ile ilgili çalışmaların unutulmamalıdır composer.json. Ekme makineleri dizinini değiştirmeniz veya ekme makineleri saklamak için birden fazla dizin kullanmanız gerekiyorsa buna dikkat edin.

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

0

CustomTableSeeder'ımız DatabaseSeeder ile aynı dizindeyse, aşağıdaki gibi kullanmalıyız:

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

DatabaseSeeder Dosyamızda; o zaman 'DB Sınıfı bulunamadı' yazan başka bir hata atılacaktır, o zaman DB cephemizi aşağıdaki gibi CustomTableSeeder Dosyamıza eklemeliyiz:

use Illuminate\Support\Facades\DB;

benim için çalıştı!


0

Ben sadece aşağıdaki iki sınıf ile TEK DOSYA kullandık:

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

    }

}

}

0

Ekme dosyalarını başka bir projeden kopyaladıysanız, artisan komutunu çalıştırmanız gerekir, php artisan db:seedaksi takdirde sorun olmaz.


0

bende var [ReflectionException] Class Seeder does not existve kullandığımda composer dump-autoloadbir hata varpreg_match(): JIT compilation failed: no more memory ben çalıştırdığımda .

Ne yaptım ben değiştirmek olmasıdır ;pcre.jit=1için pcre.jit=Offde php.ini ! php --iniTerminalinizde kullanarak yolu bulabilirsiniz !

Ben php 7.3 ile mac kullanıyorum! Orada herhangi birinize yardım umuyoruz!


0

Muhtemelen siz .php uzantıyı ve sınıfınızı bulamaz.

Ne yapıyordum :

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

Sorunumu ne çözdü: Ne yapıyordum:

php artisan db:seed --class=RolesPermissionsTableSeeder

-5

Aynı "yansıma istisnası" hatası aldım. Çözüm, sınıf dosyasını benim için dev'den sunucuya kopyalamaktı. aptal hata, ancak kaç dosya ile uğraştığımız göz önüne alındığında, bunları her seferinde sunucuya kopyalamayı unutmak kolaydır.


2
Bu yanıt çok belirsiz ve özel barındırma kurulumunuzla birleştirilmiştir. Girdilerinize değer verilmesine rağmen bu, bu soruna çözüm arayan geliştiricilere yardımcı olmayabilir. Sorununuzun, dosyaları sunucuya kopyalamasını insanlara bırakmanızdan kaynaklandığını düşünüyorum. Dosyaların otomatik olarak sunucuya dağıtıldığı bir CI boru hattı olması teşvik edilir :)
charj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.