jeroenzwart / laravel-csv-seeder
使用CSV文件在Laravel中填充数据库
Requires
- php: >=5.4.0
- illuminate/database: >=5.0
- illuminate/support: >=5.0
README
Laravel CSV Seeder
使用Laravel或Lumen通过CSV文件填充数据库
使用此包,您可以节省为数据库填充数据的时间。无需手动编写填充文件,而是可以使用CSV文件填充项目数据库。此包提供了配置选项来控制CSV文件数据的插入。
特性
- 自动尝试将CSV文件名解析为表名。
- 自动将CSV头映射到表列名。
- 跳过具有特定前缀的CSV头中的数据填充。
- 使用自定义闭包解析值。
- 使用给定列名数组对值进行哈希。
- 将默认值填充到表列。
- 调整Laravel的填充时间戳。
安装
-
通过以下方式直接要求此包:
composer require --dev jeroenzwart/laravel-csv-seeder
-
或在composer.json中添加此包并运行
composer update
"jeroenzwart/laravel-csv-seeder": "1.*"
基本用法
扩展种子类JeroenZwart\CsvSeeder\CsvSeeder
,并设置变量$this->file
为CSV文件的路径。如果CSV文件名与表名相同,则不需要指定表名。最后调用parent::run()
以填充。一个种子类看起来像这样;
use JeroenZwart\CsvSeeder\CsvSeeder; class UsersTableSeeder extends CsvSeeder { public function __construct() { $this->file = '/database/seeds/csvs/users.csv'; } /** * Run the database seeds. * * @return void */ public function run() { // Recommended when importing larger CSVs DB::disableQueryLog(); parent::run(); } }
将您的CSV放置在您的Laravel项目中的/database/seeds/csvs/路径,或构造函数中指定的任何路径。默认情况下,给定的CSV需要包含与数据库中表列名匹配的名称头行。看起来像这样;
first_name,last_name,birthday
Foo,Bar,1970-01-01
John,Doe,1980-01-01
配置
tablename
(string NULL) - 要插入数据的表名。connection
(string NULL) - 数据库连接名称。truncate
(boolean TRUE) - 在填充之前截断表。foreignKeyCheck
(boolean FALSE) - 启用或禁用外键检查。header
(boolean TRUE) - CSV有标题行,如果没有则设置为FALSE。mapping
(array []) - 列名为CSV,顺序为CSV的关联数组,如果为空,则CSV的第一行将用作标题。aliases
(array []) - CSV头名称和列名的关联数组;csvColumnName => aliasColumnName。skipper
(string %) - 跳过要导入到表中的CSV头和数据。validate
(array []) - 使用Laravel验证验证CSV行。parsers
(array []) - 列名与给定闭包解析值的关联数组。hashable
(array ['password']) - 要哈希其值的列名数组。它使用Hash::make()。empty
(boolean FALSE) - 将CSV文件中的空值设置为空字符串而不是NULL。defaults
(array []) - 表列和值的数组,当它们在CSV文件中为空时进行填充。timestamps
(string|boolean TRUE) - 在填充数据库时设置Laravel的时间戳;设置为TRUE将使用当前时间。delimiter
(string ;) - CSV文件中使用的分隔符。chunk
(integer 50) - 在读取CSV时每chunk
插入行数据。encode
(boolean TRUE) - 将行值编码为UTF-8
提示
Microsoft Excel用户可以使用宏将工作表导出到CSV。最简单的方法是将工作表命名为表名。使用以下宏进行导出:
Public Sub SaveWorksheetsAsCsv()
ActiveWorkbook.Save
Dim xWs As Worksheet
Dim xDir As String
Dim folder As FileDialog
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
For Each xWs In Application.ActiveWorkbook.Worksheets
xWs.SaveAs xDir & "\" & xWs.Name, xlCSV
Next
End Sub
示例
具有给定时间戳的表
给种子程序一个特定的表名,而不是使用CSV文件名;
public function __construct() { $this->file = '/database/seeds/csvs/users.csv'; $this->tablename = 'email_users'; $this->timestamps = '1970-01-01 00:00:00'; }
连接
给种子程序一个特定的连接和表名;
public function __construct() { $this->file = '/database/seeds/csvs/other_users.csv'; $this->connection = 'second_db'; $this->tablename = 'second_users'; }
映射
将以下CSV的标题映射到表列,使用以下CSV;
1,Foo,Bar
2,John,Doe
这样处理;
public function __construct() { $this->file = '/database/seeds/csvs/users.csv'; $this->mapping = ['id', 'firstname', 'lastname']; $this->header = FALSE; }
默认别名
使用别名和默认值播种一个表,如下所示;
public function __construct() { $this->file = '/database/seeds/csvs/users.csv'; $this->aliases = ['csvColumnName' => 'table_column_name', 'foo' => 'bar']; $this->defaults = ['created_by' => 'seeder', 'updated_by' => 'seeder']; }
跳过器
在CSV中使用前缀跳过一列。例如,你在CSV中使用id
,并且只能在CSV编辑器中使用。以下CSV文件看起来是这样的;
%id,first_name,last_name,%id_copy,birthday
1,Foo,Bar,1,1970-01-01
2,John,Doe,2,1980-01-01
每行的第一和第四个值将在播种时被跳过。默认前缀是'%',可更改;
public function __construct() { $this->file = '/database/seeds/csvs/users.csv'; $this->skipper = 'custom_'; }
验证
像这样验证CSV的每一行;
public function __construct() { $this->file = '/database/seeds/csvs/users.csv'; $this->validate = [ 'name' => 'required', 'email' => 'email', 'email_verified_at' => 'date_format:Y-m-d H:i:s', 'password' => ['required', Rule::notIn([' '])]]; }
解析
在播种CSV时像这样解析特定列的值;
public function __construct() { $this->file = '/database/seeds/csvs/users.csv'; $this->parsers = ['email' => function ($value) { return strtolower($value); }]; }
哈希
在播种CSV时像这样对值进行哈希处理;
public function __construct() { $this->file = '/database/seeds/csvs/users.csv'; $this->hashable = ['password', 'salt']; }
许可证
Laravel CSV Seeder是开源软件,MIT许可证下发布。有关更多信息,请参阅许可证文件
捐赠
如果这个项目帮助您节省了一些开发时间,您可以给我一杯啤酒:)
通过Bitcoin 17jnh8oBkgLpXo3d9Xmq6i6hhYgooaYiGf或以下链接;