我刚刚在Laravel 4应用程序中安装了Cartalyst的Sentry 2,但我发现我必须通过指定--package=cartalyst/sentry
来单独运行该程序包的迁移,这使得无法进行自动部署。
有没有办法运行php artisan migrate
并让它运行Sentry的迁移?
答案 0 :(得分:1)
我在这样的场景中通常做的是通过以下命令发布包迁移:
php artisan migrate:publish vendor/package
这会将迁移文件从任何给定的包复制到迁移文件夹。
答案 1 :(得分:1)
我创建了一个 composer 脚本来替换php artisan migrate .....
。该脚本一次运行我的迁移和供应商的迁移。
我的作曲家脚本是
"scripts": {
"migrate": [
"php artisan migrate --env=$LARAVEL_ENV",
"php artisan migrate --package=\"cartalyst/sentry\" --env=$LARAVEL_ENV",
"php artisan migrate --package=\"mrjuliuss/syntara\" --env=$LARAVEL_ENV",
"php artisan migrate --package=\"filmoteca/static-pages\" --env=$LARAVEL_ENV"
]
}
然后,您可以使用LARAVEL_ENV=prod composer run-script migrate
要将参数传递给脚本,我使用环境变量。在前面的示例中,我将环境变量LARAVEL_ENV
设置为prod
,以便迁移使用生产数据库连接。
您始终可以在本地计算机中创建别名以缩短命令。例如alias migrate="LARAVEL_ENV=local composer run-script migrate"
我认为这种方法很好,因为当您要向composer.json
添加新软件包并且此软件包具有迁移时,您可以在同一文件中添加软件包和软件包的迁移。所以,你不要忘记添加/删除包的迁移。
这是一个包含脚本
的完整composer.json答案 2 :(得分:0)
在Laravel 5之后,有一种更好的方法可以解决此问题:
在软件包的中创建迁移 / database / migrations文件夹 。 之后,在程序包的服务提供商中创建一个引导方法,引用迁移文件夹
public function boot()
{
$this->loadMigrationsFrom(__DIR__ .
'/database/migrations');
}
现在,在顶层文件夹(主应用程序,需要此软件包)上,您可以运行默认的migration命令,它将通过loadMigrationsFrom方法自动找到软件包的迁移
从以下地址复制答案: http://voerro.com/en/tutorials/r/developing-and-distributing-laravel-5-packages/3
答案 3 :(得分:0)
第三方程序包必须声明一个服务提供者,该服务提供者声明迁移。
如您在https://github.com/laravel/passport/blob/9.x/src/PassportServiceProvider.php#L80所见:
protected function registerMigrations()
{
if (Passport::$runsMigrations && ! config('passport.client_uuids')) {
return $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
}
}