hilioski/csv-seeder

允许使用CSV文件填充数据库并从字符串中提取清晰的单元

v1.0.7 2016-05-04 12:19 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:09:51 UTC


README

使用CSV文件填充数据库

此包允许基于CSV的种子。

安装

在composer.json中要求此包并运行composer update(或直接运行composer require hilioski/csv-seeder

"hilioski/csv-seeder": "1.0.*"

用法

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

id,name
1,Foo
2,Bar

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

use Flynsarmy\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文件名外,还有两个其他配置选项可用。它们可以在类的构造函数中设置

  • insert_chunk_size (int 500) 在读取CSV时,每当达到insert_chunk_size行数时,将触发一个SQL插入语句
  • csv_delimiter (string ,) CSV字段分隔符。
  • hashable (string password) 对可哈希字段进行哈希处理,如果您正在导入用户并需要将他们的密码哈希化,则很有用。使用Hash::make()。注意:这非常慢。如果您CSV中有大量行,导入将花费相当长的时间。
  • offset_rows (int 0) 忽略CSV开头多少行。警告:如果使用,您可能想设置映射,因为CSV的头行将被忽略。
  • mapping (array []) csvCol => dbCol的关联数组。有关详细信息,请参阅示例部分。如果未指定,则使用CSV(偏移后)的第一行作为映射。

示例

管道分隔的值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',
	];
}

跳过CSV头行(注意:如果这样做,则必须要求映射,因为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',
	];
}

从两个字符之间的字符串获取干净的单元(注意:$first_character和$last_character必须设置)

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->first_character = '"';
	$this->last_character = '"';
	// ex. "Test text" => Test text
}

许可证

CsvSeeder是开源软件,根据MIT许可证许可