flynsarmy/csv-seeder

允许使用CSV文件填充数据库

v2.0.6 2021-02-09 23:48 UTC

This package is auto-updated.

Last update: 2024-09-07 21:34:12 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

种子类必须扩展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文件名之外,以下配置选项也是可用的。它们可以设置在您的类构造函数中

  • 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许可