在带有种子的 laravel 8 中,我有这个问题目标类 [TableSeeder] 不存在

Ali*_*mar 12 php laravel

Illuminate\Contracts\Container\BindingResolutionException

  Target class [Database\Seeders\CountriesTableSeeder] does not exist.

  at C:\......\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:811
    807?
    808?         try {
    809?             $reflector = new ReflectionClass($concrete);
    810?         } catch (ReflectionException $e) {
  ? 811?             throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
    812?         }
    813?
    814?         // If the type is not instantiable, the developer is attempting to resolve
    815?         // an abstract type such as an Interface or Abstract Class and there is

  1   C:\......\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:809
      ReflectionException::("Class Database\Seeders\CountriesTableSeeder does not exist")

  2   C:\......\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:809
      ReflectionClass::__construct("Database\Seeders\CountriesTableSeeder")
Run Code Online (Sandbox Code Playgroud)

muh*_*ive 14

laravel 8 Seeders和工厂现在命名空间


为了适应这些变化,将Database\Seeders命名空间添加到您的播种机类。

namespace Database\Seeders;
Run Code Online (Sandbox Code Playgroud)

此外,将所有种子文件从以前的database/seeds目录移动到database/seeders文件夹。


在您的情况下,use Database\Seeders\...
DatabaseSeeder.php文件中删除所有以开头的行

应该可以解决问题

您还可以使用种子运行转储自动加载和新鲜迁移,

composer dump-autoload

php artisan migrate:fresh --seed
Run Code Online (Sandbox Code Playgroud)

  • 我实际上在升级指南中找不到这个更改,所以这节省了我一些时间,谢谢 (2认同)

Ami*_*pta 9

对于 Laravel 8,您需要进行以下更改才能使 Seeding 工作:-

  1. DatabaseSeeder.php和其他 Seeder 文件的顶部添加Database\Seeders命名空间:-

    namespace Database\Seeders;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将文件夹名称种子替换为位于文件夹的播种机\database\

  3. 更新composer.json如下:

namespace Database\Seeders;
Run Code Online (Sandbox Code Playgroud)
  1. 最后,运行以下命令:-

    composer dump-autoload
    
    php artisan db:seed
    
    Run Code Online (Sandbox Code Playgroud)

希望它会在将来对某人有所帮助!


Ali*_*mar -1

数据库播种器.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model; 

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call([
            CountriesTableSeeder::class,
            ProvincesTableSeeder::class,
            RegionsTableSeeder::class,
            PermisionsTableSeeder::class,
            RolesTableSeeder::class,
            StatusTypesTableSeeder::class,
            StatusesTableSeeder::class,
            ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

国家TableSeeder.php

<?php

use App\Country;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Model; 

class CountriesTableSeeder extends Seeder
{
    private $numberOfCountries = 10;

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('countries')->insert([
            ['country_name' => 'iraq'],
            ['country_name' => 'qater'],
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)