flabib / laravel-csv-seeder
使用CSV文件用Laravel填充数据库
v1.2.4
2020-02-01 08:06 UTC
Requires
- php: >=5.4.0
- laravel/framework: >=5.0.0
README
使用CSV文件和Laravel填充数据库
使用此包可以节省数据库填充的时间。您不必手动编写填充文件,而可以使用CSV文件来填充项目的数据库。该包提供了配置选项来控制CSV文件数据的插入。
功能
- 自动尝试将CSV文件名解析为表名。
- 自动将CSV标题映射到表列名。
- 跳过具有前缀的CSV标题中的数据填充。
- 使用给定列名的数组进行哈希值。
- 向表列填充默认值。
- 调整Laravel的填充时间戳。
安装
-
通过以下命令直接安装此包:
composer require --dev Flabib/laravel-csv-seeder
-
或者将此包添加到您的composer.json中并运行
composer update
"Flabib/laravel-csv-seeder": "1.*"
基本用法
通过扩展Flabib\CsvSeeder\CsvSeeder
类并设置变量$this->file
为CSV文件的路径来使用它。如果CSV文件的名称与表名相同,则不需要指定表名。最后调用parent::run()
以填充。一个种子类的样子如下;
use Flabib\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
(字符串) - 要插入数据的表名。truncate
(布尔值 TRUE) - 在填充之前截断表。header
(布尔值 TRUE) - CSV有标题行,如果没有则设置为FALSE。mapping
(数组 []) - 顺序为CSV的列名关联数组,如果为空,则使用CSV的第一行作为标题。aliases
(数组 []) - CSV标题名和列名的关联数组;csvColumnName => aliasColumnName。skipper
(字符串 %) - 跳过要导入到表中的CSV标题和数据。validate
(数组 []) - 使用Laravel验证器验证CSV行。hashable
(数组 ['password']) - 要哈希的列名的数组。它使用Hash::make()。defaults
(数组 []) - 要与CSV文件一起填充的表列及其值的数组。timestamps
(字符串/布尔值 TRUE) - 在填充时设置数据库中的Laravel时间戳;设置为TRUE将使用当前时间。delimiter
(字符串 ;) - CSV文件中使用的分隔符。chunk
(整数 50) - 在读取CSV时每chunk
插入行数据。encode
(布尔值 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'; }
映射
将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->hashable = ['password', 'salt']; }
许可证
Laravel CSV Seeder是开源软件,根据MIT许可证授权。