我创建了一个包,可以将迁移和种子复制到基础应用程序中的相应目录中。
但是,除非我在运行
时在基本应用程序(app / database / seeds / DatabaseSeeder.php)的run()
类中的DatabaseSeeder
函数内调用(添加)这些函数。
php artisan migrate:refresh --seed
然后种子没有运行。如何自动化此部件,以便用户不必手动编辑此文件?有手工运行种子的工匠命令吗?
答案 0 :(得分:0)
仍然不完全明白我是如何让这个工作的,但对其他人来说;
使用boot
方法[{1}}使用PackagenameServiceProvider
将种子和迁移移至基础应用
$this->publishes()
拥有public function boot()
{
if (!$this->app->routesAreCached()) {
require __DIR__.'/../routes.php';
}
$this->publishes([
__DIR__.'/../DatabaseStuff/Migrations' => $this->app->databasePath().'/migrations',
__DIR__.'/../DatabaseStuff/Seeds/Example1Seeder.php' => $this->app->databasePath().'/seeds/Example1Seeder.php',
__DIR__.'/../DatabaseStuff/Seeds/Example2Seeder.php' => $this->app->databasePath().'/seeds/Example2Seeder.php',
]);
}
个DatabaseSeeder
方法的副本,指向您希望运行的种子,但要确保它的名称间隔正确,以确保您的包中有文件。
call
现在运行以下命令。在这种情况下,我的严重命令是namespace ExampleVendor\ExamplePackage\DatabaseStuff;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->call(\Example1Seeder::class);
$this->call(\Example2Seeder::class);
Model::reguard();
}
}
php artisan optimize
没有php artisan vendor:publish
composer dump-autoload
php artisan cache:clear
php artisan optimize
php artisan db:seed --class="ExampleVendor\ExamplePackage\DatabaseStuff\DatabaseSeeder"
我一直
php artisan optimize
希望这有助于将来。