lanin/laravel-extend-seeder

Laravel Seeder 扩展。使用 CSV 数据填充数据库。

0.2.0 2017-05-05 09:50 UTC

This package is auto-updated.

Last update: 2024-09-07 21:23:17 UTC


README

Travis

扩展 Laravel Seeder 并用 CSV 数据填充您的数据库。

安装

需要 PHP 5.4+ 或 HHVM 3.3+,Composer 和 Laravel 5.0+。

要将 Laravel-Extend-Seeder 的最新版本添加到您的 composer.json 文件的 require 块中,请执行以下操作:

"lanin/laravel-extend-seeder": "dev-master"

然后运行 composer installcomposer update 以下载它并更新自动加载器。

安装后,您无需注册任何 ServiceProvider、Facade 或发布任何配置。

您只需使用 \Lanin\ExtendSeeder\Seeder 扩展您的基类 Seeder,然后即可使用!

class Seeder extends \Lanin\ExtendSeeder\Seeder { }

准备

每次尝试插入大量数据时,您都必须取消模型保护。现在您不需要这样做。它们将在启动时自动取消保护。此外,它还将禁用查询日志,这会极大地减慢数据导入速度。

环境保护

如果您担心使用测试数据填充生产数据库会破坏它,即使 artisan 询问您是否要这样做,您也可以在 Seeder 中指定 protected $environment 变量。启动方法将检查当前环境是否与设置的匹配,并抛出异常,这样您就可以确保不会破坏生产数据。

填充

在扩展基本 Seeder 之后,您将收到两个额外的方法

seedModel($model)

此方法的最佳位置是您的主 DatabaseSeeder 的 run 方法。

默认情况下,您必须调用 call 方法,该方法将解析指定的 Seeder 作为 {$tableName}TableSeeder 并启动它,然后解析您的模型并执行所有操作。

此方法会为您完成这些操作。它将通过模型表找到相关的 Seeder 并将您的模型传递给它。

提示:此方法返回解析的 Seeder 对象,因此您可以链式调用 seed 方法。

示例

class Account extends \Illuminate\Database\Eloquent\Model {
	protected $table = 'accounts';
}

class DatabaseSeeder extends Seeder {

	/**
	 * Seed your database.
	 */
	public function run()
	{
		$this->seedModel(\App\Account::class);
	}
}

class AccountsTableSeeder extends Seeder {

	/**
	 * Seed model.
	 */
	public function run()
	{
		$this->getModel()->truncate();
	}
}

seedWithCsv($csvFile = '', $model = null)

此方法使用相关 CSV 文件中的数据填充数据库。

默认情况下,它会尝试在您的 /database/seeds/csv 目录中查找它们。

文件必须命名为 {$databaseName}_{$tableName}.csv,但您可以始终覆盖此行为。

注意!如果您正在使用相同的种子填充 mysql 和 sqlite 数据库(例如,在测试时),您必须手动定义数据库名称,否则 Seeder 将尝试查找类似 database.sqlite_your_table.csv 的 CSV 文件。您可以通过 \Lanin\ExtendSeeder\Seeder::setDatabaseName('database_name'); 方法完成此操作。

如果您通过 seedModel 调用此方法,该方法已通过 seedModel 调用,它已经了解有关您模型的所有信息,并可以解析相关 CSV 文件。

示例

class AccountsTableSeeder extends Seeder {

	/**
	 * Seed model with CSV.
	 */
	public function run()
	{
		$this->seedWithCsv();
	}
}

完整示例请参阅 tests/CsvSeederTest.php

技巧

您可以将 TableSeeders 留空,并通过基本 Seeder 链接 CSV 导入。

class DatabaseSeeder extends Seeder {

	/**
	 * Seed your database.
	 */
	public function run()
	{
		$this->seedModel(\App\Account::class)->seedWithCsv();
	}
}

class AccountsTableSeeder extends Seeder {

	/**
	 * Seed model.
	 */
	public function run()
	{

	}
}

您甚至不需要创建 TableSeeders 并在基本 Seeder 中直接进行填充。

class DatabaseSeeder extends Seeder {

	/**
	 * Seed your database.
	 */
	public function run()
	{
		$this->setModel(\App\Account::class)->seedWithCsv();
	}
}

如果您希望将 CSV 文件放置在另一个位置,可以使用静态方法 setCsvPath($csvPath),其中您可以指定从您的 base_path 路径的相对路径。

贡献

请随时 fork 这个包,并通过提交 pull request 来增强其功能进行贡献。