lanin / laravel-extend-seeder
Laravel Seeder 扩展。使用 CSV 数据填充数据库。
Requires
- php: >=5.6.0
- illuminate/support: ^5.4
Requires (Dev)
- mockery/mockery: 0.9.*
- orchestra/testbench: ~3.4
- phpunit/phpunit: ~5.7
README
扩展 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 install
或 composer 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 来增强其功能进行贡献。