flynsarmy / csv-seeder
允许使用CSV文件填充数据库
v2.0.6
2021-02-09 23:48 UTC
Requires
- php: >=7.4
- illuminate/support: >=4.1.0
Requires (Dev)
- nunomaduro/larastan: ^0.6.0@dev
- orchestra/testbench: 6.*
- squizlabs/php_codesniffer: 3.*
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
种子类必须扩展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_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许可