flabib/laravel-csv-seeder

使用CSV文件用Laravel填充数据库

v1.2.4 2020-02-01 08:06 UTC

This package is auto-updated.

Last update: 2024-09-04 18:27:02 UTC


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许可证授权。