falkan3 / csv-seeder
允许使用CSV文件对数据库进行播种
v2.0.3
2020-05-18 11:07 UTC
Requires
- php: >=7.4
- illuminate/support: >=4.1.0
Requires (Dev)
README
使用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文件的头部行应与您希望导入的数据库列相匹配。例如,要导入id和name列,您的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_at和updated_at列。created_at(字符串 ISO 8601格式的当前时间) 如果timestamps为true则使用updated_at(字符串 ISO 8601格式的当前时间) 如果timestamps为true则使用
示例
带有管道分隔值的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许可