Почему экспорт из 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 и сохраните его снова, чтобы удалить лишние запятые