将迁移放在 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.xphp 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 存储在会话数据中的啥位置?