【发布时间】:2013-05-24 23:17:12
【问题描述】:
我刚刚在 Laravel 4 应用程序中安装了 Cartalyst 的 Sentry 2,但我发现我必须通过指定 --package=cartalyst/sentry 来单独运行该包的迁移,这使得自动部署变得不可能。
有没有办法运行 php artisan migrate 并让它也运行 Sentry 的迁移?
【问题讨论】:
-
我能想到的唯一方法是自定义您自己的工匠命令来尝试从包中加载尽可能多的迁移。 L4(据我所知)不支持这一点,可能是由于人们安装包然后将迁移迁移到可能删除现有表的包的安全问题。
-
我不确定我是否遵循,但如果您担心可能会删除现有表的包迁移,那么如果 Laravel 需要一个“--package”参数来运行它们,这不会有任何区别或者如果它们可以简单地使用
php artisan migrate运行。如果您担心,请先阅读包迁移。关键在于易用性。我不记得 Rails 是如何做到的,但 Django 允许您运行所有可用的迁移,包括您自己的和任何已安装的软件包。必须为每个包手动运行迁移没有多大意义,而且会浪费时间。 -
另外,如果 Laravel 能够实现我前段时间建议的一些东西:数据库中的包的“命名空间”,则可以减轻安全隐患。 Django 创建每个表,其前缀是迁移所属包的名称。这不仅解决了第三方迁移删除您自己的一个表的潜在安全问题,而且解决了一个包需要创建与另一个包同名的表时的表名冲突问题。
-
如果有人好奇,这是我对数据库表添加“命名空间”(前缀)的原始建议:github.com/laravel/framework/issues/3265
-
L4.x 和 L5.x 有所不同也许这有帮助:stackoverflow.com/a/46714177/3256489