webpatser / laravel-countries

Laravel Countries is a bundle for Laravel, providing Almost ISO 3166_2, 3166_3, currency, Capital and more for all countries.
MIT License
738 stars 230 forks source link

Support for Laravel 8 - Unable to open CountriesSeeder.php #118

Open hildaaaa opened 4 years ago

hildaaaa commented 4 years ago

Since Laravel8, seeders have been moved to database/seeders See here: https://laravel.com/docs/8.x/seeding

However currently the migration creation file tries to create the seeder at: $seeder_file = $this->laravel->path."/../database/seeds/CountriesSeeder.php";

So this is failing with the error:

  fopen(../database/seeds/CountriesSeeder.php): failed to open stream: No such file or directory

  at vendor/webpatser/laravel-countries/src/commands/MigrationCommand.php:119
jrquick17 commented 3 years ago

Here is a workaround.

<?php
namespace Database\Seeders;

use DB;
use Illuminate\Database\Seeder;
use Webpatser\Countries\Countries;

class CountriesSeeder extends Seeder {
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run() {
        //Empty the countries table
        DB::table(\Config::get('countries.table_name'))->delete();

        //Get all of the countries
        $countryModel = new Countries();
        $countries = $countryModel->getList();
        foreach ($countries as $countryId => $country){
            DB::table(\Config::get('countries.table_name'))->insert(array(
                'id' => $countryId,
                'capital' => ((isset($country['capital'])) ? $country['capital'] : null),
                'citizenship' => ((isset($country['citizenship'])) ? $country['citizenship'] : null),
                'country_code' => $country['country-code'],
                '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),
                'currency_decimals' => ((isset($country['currency_decimals'])) ? $country['currency_decimals'] : null),
                'full_name' => ((isset($country['full_name'])) ? $country['full_name'] : null),
                'iso_3166_2' => $country['iso_3166_2'],
                'iso_3166_3' => $country['iso_3166_3'],
                'name' => $country['name'],
                'region_code' => $country['region-code'],
                'sub_region_code' => $country['sub-region-code'],
                'eea' => (bool)$country['eea'],
                'calling_code' => $country['calling_code'],
                'currency_symbol' => ((isset($country['currency_symbol'])) ? $country['currency_symbol'] : null),
                'flag' =>((isset($country['flag'])) ? $country['flag'] : null),
            ));
        }
    }
}
chadriae commented 3 years ago

I had the same error. Adding the file worked, but as you can see in the first error, it's referring to the wrong path.

fopen(../database/seeds/CountriesSeeder.php): failed to open stream: No such file or directory at vendor/webpatser/laravel-countries/src/commands/MigrationCommand.php:119

I went to the file MigrationCommand.php and changed the line with the path from $seeder_file = $this->laravel->path . "/../database/seeds/CountriesSeeder.php"; to $seeder_file = $this->laravel->path . "/../database/seeders/CountriesSeeder.php";.

Mind the path in the first one still being called seeds in stead of seeders.

jrquick17 commented 3 years ago

That will fix this issue too. @chadriae

However, changing that will affect other third-party libraries with a seeder in the correct location.

Also, I wouldn't ever recommend changing vendor files directly. Or else they will be overriden by composer. Plus you should avoid tracking vendor with Git.