8

我刚刚在 Laravel 4 应用程序中安装了 Cartalyst 的 Sentry 2,但我发现我必须通过指定单独运行该包的迁移--package=cartalyst/sentry,这使得自动部署成为不可能。

有没有办法运行php artisan migrate并让它运行 Sentry 的迁移?

4

4 回答 4

4

在这种情况下,我通常会通过以下命令发布包迁移:

php artisan migrate:publish vendor/package

这会将迁移文件从任何给定包复制到您的迁移文件夹。

于 2015-04-28T08:08:28.270 回答
4

在 Laravel 5 之后有一个更好的方法来解决这个问题:

在包的 /database/migrations 文件夹中创建您的迁移。之后,在包的服务提供者中创建一个引导方法,引用迁移文件夹

public function boot()
{
    $this->loadMigrationsFrom(__DIR__ . 
    '/database/migrations');
}

现在,在顶级文件夹(需要此包的主应用程序)上,您可以运行默认迁移命令( php artisan migrate ),它会通过 loadMigrationsFrom 方法自动查找包迁移

答案复制自:http: //voerro.com/en/tutorials/r/developing-and-distributing-laravel-5-packages/3

于 2019-08-28T15:22:02.247 回答
1

我创建了一个作曲家脚本来替换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

于 2016-05-12T04:38:37.040 回答
0

第 3 方包必须声明一个服务提供者,即声明迁移。

正如您在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');
        }
    }
于 2020-05-28T14:04:57.443 回答