将迁移放在 Laravel 5.1 包中的啥位置?

Posted

技术标签:

【中文标题】将迁移放在 Laravel 5.1 包中的啥位置?【英文标题】:Where to put migration within a Laravel 5.1 package?将迁移放在 Laravel 5.1 包中的什么位置? 【发布时间】:2016-02-25 16:54:48 【问题描述】:

嗯,我确实有一个包,我只与我的系统一起使用。我确实有那个包的迁移(它是在 Laravel 4.2 上构建的,我正在升级它)。

话虽这么说:在我的包中(以前的工作台)在 Laravel 5.1 上,我在哪里放置以及如何运行我的迁移?

你们中有人知道如何处理吗?

更新

这不是简单迁移的情况。回到 laravel 4.*,我们能够维护每个包的迁移(如果需要的话),而且我确实有一些迁移由我自己的包保存,在它自己的数据库中,有它自己的表。所以...我需要它是 PACKAGE 的迁移,而不是 ROOT INSTALATION 的迁移。

【问题讨论】:

完整阅读this? 我想我做到了! (在你指出之前,我确信我做到了……现在我不敢保证!) 您要创建migration 还是运行migration 两者都有!但是,我已经有了它们。只想运行,或者更进一步,创建。 是的,vendor:publish 只是将视图复制到 /views 并迁移到 /database/migrations - 因此,在发布后,我们仍然需要运行 php artisan migrate。最后,就像将它们放在迁移文件夹中一样。我错了吗? 【参考方案1】:

你可以把它放在packages/.../src/migrations。 运行它:

    你可以在 composer.json 中插入:

"autoload": "classmap": [ "database", "packages/.../src/migrations" ],

    或者直接打电话:

    Laravel 4.x php artisan migrate --package="vendor/name" Laravel 5.x php artisan migrate --path=/packages/.../migrations

更多信息:查看this blog from websanova.com

【讨论】:

我不小心赞成这个答案,即使它对我不起作用。另一个做到了:***.com/a/50499101/470749【参考方案2】:

Laravel 5.6+ 的更新答案

https://laravel.com/docs/5.6/packages#migrations 说:

如果您的包包含数据库迁移,您可以使用 loadMigrationsFrom 方法通知 Laravel 如何加载它们。这 loadMigrationsFrom 方法接受包的路径 迁移作为其唯一的论点:

/**
 * Perform post-registration booting of services.
 *
 * @return void
 */
public function boot()

    $this->loadMigrationsFrom(__DIR__.'/path/to/migrations');

一旦您的包的迁移被注册,它们将 php artisan migrate 命令时自动运行 执行。您不需要将它们导出到应用程序的主 数据库/迁移目录。

正斜杠很重要。就我而言,我使用的是:$this->loadMigrationsFrom(__DIR__ . "/migrations");

【讨论】:

【参考方案3】:

创建migration

    转到command prompt 找到您的项目根文件夹并运行以下命令:php artisan make:migration yourMigrationFileName --create=tableName 您可以在yourProjectFolder\database\migrations\timestamp_yourMigrationFileName.php 中找到您的迁移文件 创建您的表格。

运行migration

    转到command prompt 找到您的项目根文件夹并运行以下命令:php artisan migrate

别忘了在Model 中声明您的表名。你可以通过在你的模型中写protected $table = 'tableName'来做到这一点。

【讨论】:

准确地说,不是某个日期,而是时间戳 @Tezla 对此我很抱歉,但这不是问题所在。时间戳将由 Laravel 自己创建。 这只是一个标准迁移。其中我在文档上阅读过。

以上是关于将迁移放在 Laravel 5.1 包中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.2 将用户 ID 存储在会话数据中的啥位置?

我应该把这段代码放在 Laravel 的啥地方?

将用户信息放在会话中的啥位置

将 JavaScript 放在 HTML 文件中的啥位置?

将“资产”文件夹放在 Android Studio 中的啥位置?

我应该将 <script> 标签放在 HTML 标记中的啥位置?