라 라벨 5-장인 씨 [ReflectionException] Class SongsTableSeeder 존재하지 않습니다


275

PHP artisan db : seed를 실행 하면 다음 오류가 발생합니다.

[ReflectionException] Class SongsTableSeeder does not exist

무슨 일이야?

DatabaseSeeder 클래스 :

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

}

나의 SongsTableSeeder 클래스 :

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

    }

}

107
composer dump-autoload?
Thomas Jensen

Faker \ Factory를 Faker로 사용 한다고 생각했습니다 . 일을하고 있습니까?
사샤

SongsTableSeeder클래스 정의를 포함하는 파일의 경로는 무엇입니까 ?
Wouter J


이것은 덤프와 나쁘다
Luigi Lopez

답변:


748

SongsTableSeeder파일 SongsTableSeeder.php이있는 동일한 디렉토리 에 파일 을 넣어야 DatabaseSeeder.php합니다.

그리고 콘솔에서 실행해야합니다.

composer dump-autoload

새 클래스 맵을 생성 한 후 다음을 실행하십시오.

php artisan db:seed

방금 테스트했습니다. Laravel 5에서 문제없이 작동합니다


1
나는 시더 클래스에서 모델을 '사용'하지 않았습니다. 지금은 잘 작동합니다.
Jamie Poole

1
composer dumpautoload또한 날아
코너 거머리

composer dump-autoload는 문제를 해결했습니다. composer dump-autoload는 실제로 어떤 기능을 수행합니까?
루이스 알메이다

5
@ LuísAlmeida dump-autoload는 프로젝트에 포함되어야하는 모든 클래스 목록을 재생성합니다. 프로젝트 내부에 새 클래스가있을 때 사용됩니다. 정상적으로 실행 make:*하면 새로 작성된 클래스가 추가되지만 시더를 수동으로 작성하는 경우에는 발생하지 않습니다. 적어도 5 분 동안 검색하면 작동한다는 것을 이해합니다. 나는 전문가가 아닙니다.
Xander Luciano

개발 서버에서 Laravel 5.8을 사용 하여이 솔루션을 사용해 보았습니다 composer dump-autoload.
Mycodingproject

19

나는 이것을함으로써 그것을 해결했다 :

  1. 파일 내용을 복사하십시오.
  2. 파일을 지우다.
  3. php artisan make : seeder 명령을 실행하십시오.
  4. 파일 내용을이 파일에 다시 복사하십시오.

파일 이름을 변경했기 때문에 발생했습니다. 변경 후 왜 작동하지 않는지 모르겠습니다.


2
아마도 composer dump-auto를 실행하는 것이 더 쉬웠습니다. 오토로더가 이제 더 오래된 파일을 찾고 있습니다. 따라서 명령 행을 통해이 파일을 덤프하면 새 파일이 포함 된 새 오토로더 파일이 생성됩니다. 그래서 미래에 이것을 시도 =)
Ron van Asseldonk

composer autoloader에 대한 자세한 내용은 다음 사이트를 참조하십시오. getcomposer.org/doc/01-basic-usage.md#autoloading
Ron van Asseldonk

van Asseldok composer dump-autoload은 저에게 효과적이지 않습니다. 시더 클래스를 다시 작성해야 작동합니다.
М.Б.

이것은 나를 도왔다. 'composer dump-autoload'는 저의 서버 설정과 관련이 있거나 공유 서버라는 사실에도 영향을 미치지 않습니다.
Derk Jan Speelman

16

File SongsTableSeeder.phpdatabase / seeds 디렉토리 또는 서브 디렉토리 에 있어야합니다 .

다음을 실행해야합니다.

composer dump-autoload

그리고:

php artisan db:seed

또는:

php artisan db:seed --class=SongsTableSeeder

1
'php artisan db : seed --class = SongsTableSeeder'명령으로 구문 분석 오류 를 볼 수 있습니다. thnks !!
OmiK

4

SongsTableSeeder.php는 database / seeds 디렉토리에 있어야합니다

콘솔 명령 단계 :

composer dump-autoload

그리고:

php artisan cache:clear

그리고:

php artisan optimize

그리고:

php artisan db:seed

또는:

php artisan db:seed --class=SongsTableSeeder

나를 위해 일했다! 특히 php artisan optimize부분
모세 Ndeda

3

최신 Laravel 5 개발 릴리스를 실행 중이며 네임 스페이스를 변경 한 경우 다음과 같이 시드 클래스를 호출해야합니다.

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

분명히 todoparrot지정된 네임 스페이스 로 바꿔야 합니다. 그렇지 않으면 원래 질문에 표시된 것과 동일한 오류가 발생합니다.


3

composer dump-autoload의 자동로드 / 클래스 맵 섹션과 관련 하여 작동 하는 것을 잊지 마십시오 composer.json. 파종기 디렉토리를 변경하거나 파종기를 저장하기 위해 여러 디렉토리를 사용해야하는 경우주의하십시오.

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

0

CustomTableSeeder가 DatabaseSeeder와 동일한 디렉토리에있는 경우 다음과 같이 사용해야합니다.

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

DatabaseSeeder 파일에서; 그런 다음 'DB 클래스를 찾을 수 없습니다'라는 또 다른 오류가 발생합니다 .DB 외관을 CustomTableSeeder 파일에 다음과 같이 추가해야합니다.

use Illuminate\Support\Facades\DB;

그것은 나를 위해 일했다!


0

다음 두 클래스와 함께 단일 파일 만 사용했습니다.

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

다른 프로젝트에서 파종기 파일을 복사 한 경우 artisan 명령을 실행해야 php artisan db:seed합니다. 그렇지 않으면 괜찮습니다.


0

나도 [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을 사용하고 있습니다! 저기있는 사람들을 도와주세요!


0

.php확장명을 지정했을 때 클래스를 찾을 수 없습니다.

내가하고있는 일 :

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

내 문제를 해결 한 것 : 내가하고있는 일 :

php artisan db:seed --class=RolesPermissionsTableSeeder

-5

동일한 "반사 예외"오류가 발생했습니다. 해결책은 클래스 파일을 dev에서 서버로 복사하는 것이 었습니다. 바보 같은 실수이지만 매번 서버에 파일을 복사하는 것을 잊어 버릴 수있는 파일 수를 감안할 때.


2
이 응답은 매우 모호하며 특정 호스팅 설정과 연결됩니다. 귀하의 의견이 중요하지만 개발자가이 문제에 대한 해결책을 찾는 데 도움이되지 않을 수 있습니다. 귀하의 문제는 파일을 서버에 복사하기 위해 사람에게 맡기면 발생한다고 생각합니다. 파일이 서버에 자동으로 배포되는 CI 파이프 라인을 사용하는 것이 좋습니다. :
charj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.