laravel - 导入外部种子数据
问题描述
我希望将大量种子文件拆分为外部文件。
我如何 a) 设置外部文件和 b) 导入该文件。
我已经尝试对外部文件进行命名空间,但这似乎不起作用。
该文件位于我的种子目录中的一个文件夹内。
解决方案
命名空间实际上是解决方案,但仅限于拆分文件。您仍然需要一个播种机来呼叫其他播种机。默认情况下,Laravel 有DatabaseSeeder.php
:
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder {
public function run() {
$this->call(ExampleSeeder::class);
...
}
}
ExampleSeeder
是一个非命名空间文件,位于database/seeds/ExampleSeeder.php
.
运行该命令php artisan db:seed
将使用DatabaseSeeder.php
该类来运行public function run()
. 现在我们了解了这一点,我们可以添加“外部”种子。给定结构:
- database
- seeds
- external
- ExternalExampleSeeder.php
- DatabaseSeeder.php
- ExampleSeeder.php
如果您尝试添加$this->call(ExternalExampleSeeder::class);
,您将收到错误消息:
目标类 [ExternalExampleSeeder] 不存在。
要解决这个问题,您需要命名空间并导入种子:
// ExternalExampleSeeder.php
<?php
namespace App\Database\Seeds\External;
use Illuminate\Database\Seeder;
class ExternalExampleSeeder extends Seeder {
...
}
// DatabaseSeeder.php
<?php
use Illuminate\Database\Seeder;
use App\Database\Seeds\External\ExternalExampleSeeder;
class DatabaseSeeder extends Seeder {
public function run() {
$this->call(ExampleSeeder::class);
$this->call(ExternalExampleSeeder::class);
...
}
}
然后运行php artisan db:seed
,那么它应该没有问题。
因此,解决方案是将DatabaseSeeder.php
种子和默认种子保留为非命名空间,并在命名空间中导入这些种子database/seeds/external
(或任何您的目录)。
推荐阅读
- python-3.x - Python Tkinter - 如何在窗格窗口中正确调整画布大小
- mongodb - 在文档mongoDB springboot中的对象列表中查找时间戳的最大值
- php - Google OAuth - 访问令牌和刷新令牌之间的区别
- json - Flutter 如何将地图从互联网 API 转换为列表?
- javascript - 如何阅读 nextjs 错误信息或定位错误
- javascript - 使用扩展语法修改状态的问题
- flutter - 我必须始终等待 Flutter Shared Preferences 吗?
- java - IntelliJ:你如何覆盖单个测试的 VM 选项?
- javascript - 如何在命令后立即重新打开语音识别
- server - 前端和微服务之间的通信