Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
hildaaaa opened this issue Sep 15, 2020 · 3 comments
Open

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

hildaaaa opened this issue Sep 15, 2020 · 3 comments

Comments

@hildaaaa
Copy link

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
Copy link

jrquick17 commented Mar 18, 2021

Here is a workaround.

  • Create the file CountriesSeeder.php at database/seeders/ like below:
<?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),
            ));
        }
    }
}
  • Now run php artisan db:seed --class=CountriesSeeder

@chadriae
Copy link

chadriae commented Mar 18, 2021

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
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants