从包中播种/修复ReflectionException

时间:2015-12-15 17:37:20

标签: laravel laravel-5.1

我创建了一个包,可以将迁移和种子复制到基础应用程序中的相应目录中。

但是,除非我在运行

时在基本应用程序(app / database / seeds / DatabaseSeeder.php)的run()类中的DatabaseSeeder函数内调用(添加)这些函数。
php artisan migrate:refresh --seed

然后种子没有运行。如何自动化此部件,以便用户不必手动编辑此文件?有手工运行种子的工匠命令吗?

1 个答案:

答案 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

希望这有助于将来。