falkan3/csv-seeder

允许使用CSV文件对数据库进行播种

v2.0.3 2020-05-18 11:07 UTC

This package is auto-updated.

Last update: 2024-09-20 16:05:48 UTC


README

Latest Version on Packagist Software License Build Status Quality Score Total Downloads

使用CSV文件播种数据库

此软件包允许基于CSV的播种。

安装

在您的composer.json中要求此软件包,并运行composer update(或直接运行composer require flynsarmy/csv-seeder:2.*

适用于PHP 7.4+

"flynsarmy/csv-seeder": "2.0.*"

适用于旧版PHP版本

"flynsarmy/csv-seeder": "1.*"

用法

您的CSV文件的头部行应与您希望导入的数据库列相匹配。例如,要导入idname列,您的CSV文件应如下所示

id,name
1,Foo
2,Bar

播种类必须扩展Falkan3\CsvSeeder\CsvSeeder,它们必须定义目标数据库表和CSV文件路径,并且最后必须像这样调用parent::run()

use Falkan3\CsvSeeder\CsvSeeder;

class StopsTableSeeder extends CsvSeeder {

	public function __construct()
	{
		$this->table = 'your_table';
		$this->filename = base_path().'/database/seeds/csvs/your_csv.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文件放入/database/seeds/csvs/your_csv.csv或您在构造函数中指定的任何路径。

配置

除了设置数据库表和CSV文件名外,还提供了以下配置选项。它们可以在类的构造函数中设置

  • connection (字符串 '') 用于插入的连接。留空以使用默认连接。
  • insert_chunk_size (整数 500) 当读取CSV时,每insert_chunk_size行将触发一个SQL插入语句
  • csv_delimiter (字符串 ,) CSV字段分隔符。
  • hashable (数组 [password]) 在导入之前要散列的字段列表。如果您正在导入用户并需要散列其密码,则很有用。使用Hash::make()。注意:这非常慢。如果您CSV中有大量行,导入将花费相当长的时间。
  • offset_rows (整数 0) 忽略CSV开始处的行数。警告:如果使用,您可能需要设置映射,因为CSV的标题行将被跳过。
  • mapping (数组 []) csvCol => dbCol的关联数组。有关详细信息,请参阅示例部分。如果未指定,CSV(偏移后)的第一行将用作映射。
  • should_trim (布尔值 false) 是否在导入期间修剪CSV中每个单元格的数据。
  • timestamps (布尔值 false) 是否在导入时添加created_atupdated_at列。
    • created_at (字符串 ISO 8601格式的当前时间) 如果timestampstrue则使用
    • updated_at (字符串 ISO 8601格式的当前时间) 如果timestampstrue则使用

示例

带有管道分隔值的CSV

public function __construct()
{
	$this->table = 'users';
	$this->csv_delimiter = '|';
	$this->filename = base_path().'/database/seeds/csvs/your_csv.csv';
}

指定要导入的CSV列

public function __construct()
{
	$this->table = 'users';
	$this->csv_delimiter = '|';
	$this->filename = base_path().'/database/seeds/csvs/your_csv.csv';
	$this->mapping = [
	    0 => 'first_name',
	    1 => 'last_name',
	    5 => 'age',
	];
}

修剪导入数据的空白

public function __construct()
{
	$this->table = 'users';
	$this->csv_delimiter = '|';
	$this->filename = base_path().'/database/seeds/csvs/your_csv.csv';
	$this->mapping = [
	    0 => 'first_name',
	    1 => 'last_name',
	    5 => 'age',
	];
	$this->should_trim = true;
}

跳过CSV标题行(注意:如果这样做,则需要映射)

public function __construct()
{
	$this->table = 'users';
	$this->csv_delimiter = '|';
	$this->filename = base_path().'/database/seeds/csvs/your_csv.csv';
	$this->offset_rows = 1;
	$this->mapping = [
	    0 => 'first_name',
	    1 => 'last_name',
	    2 => 'password',
	];
	$this->should_trim = true;
}

指定要使用的数据库连接

public function __construct()
{
	$this->table = 'users';
	$this->connection = 'my_connection';
	$this->filename = base_path().'/database/seeds/csvs/your_csv.csv';
}

迁移指南

2.0

  • $seeder->hashable现在是一个列的数组,而不是单个列名。将您旧字符串值用[]括起来。

许可证

CsvSeeder是开源软件,许可协议为MIT许可