Почему экспорт из Excel в Csv приводит к сбою Laravel Seeder при использовании пакета Flynsarmy csv seeder?

Я использую этот пакет: https://github.com/Flynsarmy/laravel-csv-seeder

Сеялка Flynsarmy Csv работает нормально, если я вручную создаю файл и сохраняю его как csv, а затем заполняю базу данных. Ремесленник отвечает

"Seeding: ProductsTableSeeder
Database seeding completed successfully."

Тем не менее, если я сохраню файл Excel как CSV, я получу ответ,

"Seeding: ProductsTableSeeder"

Это не подводит. Никаких исключений не выбрасывается. Но также нет сообщения об успехе.

Когда я проверяю БД, таблицы пусты.

Вот мой метод миграции "вверх"

 {
    Schema::create('products', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('sku')->nullable();
        $table->string('name');
        $table->string('species')->nullable();
        $table->string('fabric')->nullable();
        $table->string('panel')->nullable();
        $table->string('gauge_gasket')->nullable();
        $table->string('type')->nullable();
        $table->string('brand')->nullable();
        $table->string('brand_label')->nullable();
        $table->boolean('is_cjb');
        $table->boolean('is_osp');
        $table->boolean('is_starmark');
        $table->boolean('is_vision');
        $table->boolean('gasketed');;
        $table->string('color');
        $table->float('inside_width')->nullable();
        $table->float('inside_length')->nullable();
        $table->float('outside_width')->nullable();
        $table->float('outside_length')->nullable();
        $table->timestamps();
    });

Вот моя реализация Flynsarmy Csv Seeder:

use Flynsarmy\CsvSeeder\CsvSeeder;

    class ProductsTableSeeder extends CsvSeeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
              public function __construct()
          {
            $this->table = 'products';
            $this->filename = base_path().'/database/seeds/csvs/product_info.csv';
          }

          public function run()
          {
            // Recommended when importing larger CSVs
            DB::disableQueryLog();

            // Uncomment the below to wipe the table clean before populating
            DB::table($this->table)->truncate();

            parent::run();


          }
    }

Теперь я подозревал, что моей проблемой является CSV-файл. Я использовал csvlint.io и он говорит

*

Структурная проблема: Предполагаемый заголовок Поскольку машинно-читаемый способ определить, есть ли у вашего CSV строка заголовка, мы предположили, что он есть у вашего CSV.

*

Тем не менее, он дает то же самое сообщение для CSV, который я создал вручную, и это, кажется, работает очень хорошо.

Я подумал, что это может быть проблема с разрешением, и поэтому я сделал ls -lr в моем каталоге / database / seed / csvs, и я получаю

-rw-rw-r-- 1 secretname secretname 18315 Dec 19 14:07 product_info.csv

Я даже делал то, что друзья не позволяют друзьям делать (chmod 777), но это ничего не исправило, так что это не проблема с разрешениями.

Я неоднократно делал:

php artisan cache:clear
composer dumpautoload
php artisan migrate:fresh --seed

Все, что я хочу сделать, это экспортировать из Excel в CSV и заполнить базу данных. Почему это такая проблема?

Вот образец моего CSV-файла. Я пробовал как с идентификатором столбца, так и без (так как laravel добавляет идентификатор и автоинкременты)

    sku,name,species,fabric,panel,finish,color,type,inside_width,inside_length,outside_width,outside_length,
800124,air tray casket,,,,white,,,30.5,,,,
555555,alex,metal,blue crepe,,paint,light blue,metal caskets,24.5,76.75,28.5,83,
578645,alex,metal,rosetan crepe,,paint,copper,metal caskets,24.5,76.75,28.5,83,
524785,alex,metal,oyster crepe,,paint,silver,metal caskets,24.5,76.75,28.5,83,
483959,alex,metal,oyster crepe,,paint,white,metal caskets,24.5,76.75,28.5,83,

Flynsarmy CSV, который они дают в качестве образца, был тот, который работал успешно, это просто

id,name
1,Foo
2,Bar

1 ответ

Я чувствую себя так глупо Или умный, в зависимости от того, как я на это смотрю. Я искал сложные ответы, просматривая гигантский CSV. Таким образом, я связал это с несколькими пунктами за один раз. Это - кома. Excel помещал комы там, где они не должны быть (в конце каждой строки). Удаление комы с конца каждой строки решает проблему. Интересно, что я не получил сообщение "База данных успешно заполнена". Он только сказал "Seeding: ProductsTableSeeder", но на этот раз он заполнил таблицы. Ну, привет, мир! Как это для первого поста?;)

Но вы знаете, что? Этот линтер подтвердил мой CSV и сказал, что все было хорошо. Ну, это было неправильно!

Я столкнулся с той же проблемой.

Excel помещает лишнюю запятую только в том случае, если есть форматирование, такое как граница таблицы, в столбце, в котором нет данных.

Откройте csv с помощью excel и сохраните его снова, чтобы удалить лишние запятые

Другие вопросы по тегам