jeroenzwart/laravel-csv-seeder

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

v1.6.3 2023-09-18 21:01 UTC

This package is auto-updated.

Last update: 2024-09-18 23:11:29 UTC


README

PHP from Packagist Latest Version on Packagist GitHub code size in bytes Total Downloads Scrutinizer code quality (GitHub/Bitbucket)

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或以下链接;

paypal