【问题标题】:CountriesTableSeeder does not exist - LaravelCountryTableSeeder 不存在 - Laravel
【发布时间】:2021-11-17 10:24:13
【问题描述】:

https://i.stack.imgur.com/PkCwB.png:错误截图

我已经用 composer 安装了一个包 ernysans/laraworld。在app/config/app.php 中添加了各自的providersaliases。然后,我运行这个 - php artisan vendor:publish --provider="ErnySans\Laraworld\LaraworldServiceProvider" & php artisan migrate。之后,在运行php artisan db:seed 时,出现上述错误。我已经浏览了这个链接in laravel 8 with seeding , i has this issue Target class [TableSeeder] does not exist。试过composer dump-autoload。我该如何解决这个问题?

database/seeders/DatabaseSeeder.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Database\Seeds\CountriesTableSeeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call([CountriesTableSeeder::class,TimeZonesTableSeeder::class,LanguagesTableSeeder::class]);
    }
}

database/seeds/CountriesTableSeeder.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use ErnySans\Laraworld\Models\Countries;

class CountriesTableSeeder extends Seeder
{        
    public function run()
    { 
        Countries::truncate();

        $JSON_countries = Countries::allJSON();

        foreach ($JSON_countries as $country) {
            Countries::create([
                'capital'           => ((isset($country['capital'])) ? $country['capital'] : null),
                'citizenship'       => ((isset($country['citizenship'])) ? $country['citizenship'] : null),
                'country_code'      => ((isset($country['country_code'])) ? $country['country_code'] : null),
                'currency'          => ((isset($country['currency'])) ? $country['currency'] : null),
                'currency_code'     => ((isset($country['currency_code'])) ? $country['currency_code'] : null),
                'currency_sub_unit' => ((isset($country['currency_sub_unit'])) ? $country['currency_sub_unit'] : null),
                'full_name'         => ((isset($country['full_name'])) ? $country['full_name'] : null),
                'iso_3166_2'        => ((isset($country['iso_3166_2'])) ? $country['iso_3166_2'] : null),
                'iso_3166_3'        => ((isset($country['iso_3166_3'])) ? $country['iso_3166_3'] : null),
                'name'              => ((isset($country['name'])) ? $country['name'] : null),
                'region_code'       => ((isset($country['region_code'])) ? $country['region_code'] : null),
                'sub_region_code'   => ((isset($country['sub_region_code'])) ? $country['sub_region_code'] : null),
                'eea'               => (bool)$country['eea'],
                'calling_code'      => ((isset($country['calling_code'])) ? $country['calling_code'] : null),
                'currency_symbol'   => ((isset($country['currency_symbol'])) ? $country['currency_symbol'] : null),
            ]);
        }
    }
}

composer.json

 "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
 

【问题讨论】:

    标签: php laravel eloquent laravel-8 laravel-seeding


    【解决方案1】:

    有两种选择

    1. 您应该将CountriesTableSeeder 放在命名空间为的种子文件夹中

      命名空间数据库\Seeders;

    2. 您应该在DatabaseSeeder 中使用CountriesTableSeeder,如下所示

      使用数据库\Seeds\CountriesTableSeeder;

    database/seeder/DatabaseSeeder.php

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    use Database\Seeds\CountriesTableSeeder;
    
    class DatabaseSeeder extends Seeder
    {
        public function run()
        {
            $this->call([CountriesTableSeeder::class,TimeZonesTableSeeder::class,LanguagesTableSeeder::class]);
        }
    }
    

    ==============================================

    解决方案 2 完整代码

    ==============================================

    使用以下内容更新您的代码:

    database/seeders/DatabaseSeeder.php

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    use Database\Seeds\CountriesTableSeeder;
    
    class DatabaseSeeder extends Seeder
    {
        public function run()
        {
            $this->call([CountriesTableSeeder::class,TimeZonesTableSeeder::class,LanguagesTableSeeder::class]);
        }
    }
    

    database/seeds/CountriesTableSeeder.php

    <?php
    
    namespace Database\Seeds;
    
    use Illuminate\Database\Seeder;
    use ErnySans\Laraworld\Models\Countries;
    
    class CountriesTableSeeder extends Seeder
    {        
        public function run()
        { 
            Countries::truncate();
    
            $JSON_countries = Countries::allJSON();
    
            foreach ($JSON_countries as $country) {
                Countries::create([
                    'capital'           => ((isset($country['capital'])) ? $country['capital'] : null),
                    'citizenship'       => ((isset($country['citizenship'])) ? $country['citizenship'] : null),
                    'country_code'      => ((isset($country['country_code'])) ? $country['country_code'] : null),
                    'currency'          => ((isset($country['currency'])) ? $country['currency'] : null),
                    'currency_code'     => ((isset($country['currency_code'])) ? $country['currency_code'] : null),
                    'currency_sub_unit' => ((isset($country['currency_sub_unit'])) ? $country['currency_sub_unit'] : null),
                    'full_name'         => ((isset($country['full_name'])) ? $country['full_name'] : null),
                    'iso_3166_2'        => ((isset($country['iso_3166_2'])) ? $country['iso_3166_2'] : null),
                    'iso_3166_3'        => ((isset($country['iso_3166_3'])) ? $country['iso_3166_3'] : null),
                    'name'              => ((isset($country['name'])) ? $country['name'] : null),
                    'region_code'       => ((isset($country['region_code'])) ? $country['region_code'] : null),
                    'sub_region_code'   => ((isset($country['sub_region_code'])) ? $country['sub_region_code'] : null),
                    'eea'               => (bool)$country['eea'],
                    'calling_code'      => ((isset($country['calling_code'])) ? $country['calling_code'] : null),
                    'currency_symbol'   => ((isset($country['currency_symbol'])) ? $country['currency_symbol'] : null),
                ]);
            }
        }
    }
    

    ==================================

    解决方案 1 完整代码:

    ==================================

    database/seeders/DatabaseSeeder.php

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    
    class DatabaseSeeder extends Seeder
    {
        public function run()
        {
            $this->call([CountriesTableSeeder::class,TimeZonesTableSeeder::class,LanguagesTableSeeder::class]);
        }
    }
    

    注意:将您的 CountryTableSeeder.php 移动到 seeders 文件夹中

    数据库/seeders/CountriesTableSeeder.php

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    use ErnySans\Laraworld\Models\Countries;
    
    class CountriesTableSeeder extends Seeder
    {        
        public function run()
        { 
            Countries::truncate();
    
            $JSON_countries = Countries::allJSON();
    
            foreach ($JSON_countries as $country) {
                Countries::create([
                    'capital'           => ((isset($country['capital'])) ? $country['capital'] : null),
                    'citizenship'       => ((isset($country['citizenship'])) ? $country['citizenship'] : null),
                    'country_code'      => ((isset($country['country_code'])) ? $country['country_code'] : null),
                    'currency'          => ((isset($country['currency'])) ? $country['currency'] : null),
                    'currency_code'     => ((isset($country['currency_code'])) ? $country['currency_code'] : null),
                    'currency_sub_unit' => ((isset($country['currency_sub_unit'])) ? $country['currency_sub_unit'] : null),
                    'full_name'         => ((isset($country['full_name'])) ? $country['full_name'] : null),
                    'iso_3166_2'        => ((isset($country['iso_3166_2'])) ? $country['iso_3166_2'] : null),
                    'iso_3166_3'        => ((isset($country['iso_3166_3'])) ? $country['iso_3166_3'] : null),
                    'name'              => ((isset($country['name'])) ? $country['name'] : null),
                    'region_code'       => ((isset($country['region_code'])) ? $country['region_code'] : null),
                    'sub_region_code'   => ((isset($country['sub_region_code'])) ? $country['sub_region_code'] : null),
                    'eea'               => (bool)$country['eea'],
                    'calling_code'      => ((isset($country['calling_code'])) ? $country['calling_code'] : null),
                    'currency_symbol'   => ((isset($country['currency_symbol'])) ? $country['currency_symbol'] : null),
                ]);
            }
        }
    }
    

    【讨论】:

    • 我遇到了同样的错误。请参阅更新后的 questin 正文。我已经按照您所说的进行了更改
    • 如果您已将CountriesTableSeeder 移动到seeders 文件夹中,则您已经使用了这两种解决方案,您可以从DatabaseSeeder 中删除use Database\Seeds\CountriesTableSeeder;
    • 现在,我刚刚从seeders 文件夹中删除了CountriesTableSeeder 并将其放入seeds 文件夹中。并将use Database\Seeds\CountriesTableSeeder; 的行保留在databaseSeeder.php 中。仍然有同样的错误。如果是这样,现在coutriesTableSeeder 的命名空间应该是什么?
    • 我在我的回答检查中为您添加了一个完整的代码部分...
    • 我粘贴了你的代码。还是一样的错误。
    猜你喜欢
    • 2017-08-07
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 2014-02-09
    • 2018-12-15
    相关资源
    最近更新 更多