关键词:
【中文标题】Laravel 在“app/database/migrations”文件夹上递归运行迁移【英文标题】:Laravel running migrations on "app/database/migrations" folder recursively 【发布时间】:2014-03-05 16:23:18 【问题描述】:所以我的迁移文件夹看起来像这样,因为我有几十个表,它使事情保持井井有条:
migrations/
create_user_table.php
relations/
translations/
我正在尝试刷新所有迁移和种子,但似乎我遇到了一个小问题,我不知道递归运行迁移的工匠命令(即在 relations
和translations
文件夹)。
我尝试添加--path="app/database/migrations/*"
,但它吐出了一个错误。有谁知道这个问题的解决方案吗?
【问题讨论】:
在网上挖了一圈后,看起来不可能做到:github.com/laravel/framework/issues/2561 为什么不对迁移进行排序/组织是件好事? 函数 rei($folder) $iterator = new DirectoryIterator($folder); system("php artisan migrate --path=" . $folder); foreach ($iterator as $fileinfo) if ($fileinfo->isDir() && !$fileinfo->isDot()) echo $fileinfo->getFilename() . "\n"; rei($folder . $fileinfo->getFilename() . '/'); rei('./database/'); 【参考方案1】:现在唯一的方法是手动完成所有迁移。也就是说,您必须对每个子文件夹运行迁移命令:
php artisan migrate --path=/app/database/migrations/relations
php artisan migrate --path=/app/database/migrations/translations
但是,您可以轻松地扩展 artisan 系统以编写您自己的迁移命令,该命令将遍历迁移文件夹下的所有文件夹,为您创建这些命令并运行它们。
如果您不想通过 artisan 进行此操作,也可以简单地编写一个 shell 脚本
编辑:对于 Laravel >= 5.0,在子目录中迁移迁移文件的正确命令是:
php artisan migrate --path=/database/migrations/relations
php artisan migrate --path=/database/migrations/translations
【讨论】:
谢谢,我最终选择了脚本路线。 这对我有帮助。尽管我很困惑,您将如何使用这种方式进行回滚? 同php artisan migrate:rollback --path=migration/path
【参考方案2】:
这不是一个“直接”的解决方案,但我建议你在你的 laravel 项目中查看模块化。
模块可以将您的应用程序分割成几个较小的“文件夹”,并将迁移、种子、类、路由、控制器、命令放在易于维护的文件夹中。
这个包是一个好的开始:https://github.com/pingpong-labs/modules
【讨论】:
【参考方案3】:在 Laravel 5 中,数据库文件夹默认位于 app 文件夹旁边。所以你可以运行这个来迁移单个文件夹迁移:
php artisan migrate --path=/database/migrations/users
【讨论】:
【参考方案4】:一个简单的 Laravel 解决方案是创建一个 gulp 任务(比如migrate-others
)。
var elixir = require('laravel-elixir');
var gulp = require('gulp');
var shell = require('gulp-shell')
/*
|--------------------------------------------------------------------------
| Elixir Asset Management
|--------------------------------------------------------------------------
|
| Elixir provides a clean, fluent API for defining some basic Gulp tasks
| for your Laravel application. By default, we are compiling the Sass
| file for our application, as well as publishing vendor resources.
|
*/
elixir(function(mix)
mix.sass('app.scss');
);
// Our Task
gulp.task('migrate-others', shell.task([
'php artisan migrate --path=/app/database/migrations/relations',
'php artisan migrate --path=/app/database/migrations/translations',
]));
现在你可以简单地调用
gulp migrate-others
【讨论】:
当我使用这个命令时,它们显示错误 --"'gulp' 未被识别为内部或外部命令," @Vipul:安装 gulp(通过npm install --global gulp
)并重试。更多信息在这里.. laravel.com/docs/5.0/elixir
在你的 composer.json 中执行此操作 getcomposer.org/doc/articles/scripts.md#defining-scripts【参考方案5】:
给你!
function rei($folder)
$iterator = new DirectoryIterator($folder);
system("php artisan migrate --path=" . $folder);
foreach ($iterator as $fileinfo)
if ($fileinfo->isDir() && !$fileinfo->isDot())
echo $fileinfo->getFilename() . "\n";
rei($folder . $fileinfo->getFilename() . '/');
rei('./database/');
【讨论】:
【参考方案6】:您也可以使用通配符,如下所示:
php artisan migrate --path=/database/migrations/*
【讨论】:
【参考方案7】:这添加到 AppServiceProvider
中的 boot 方法$mainPath = database_path('migrations');
$directories = glob($mainPath . '/*' , GLOB_ONLYDIR);
$paths = array_merge([$mainPath], $directories);
$this->loadMigrationsFrom($paths);
现在你可以使用php artisan migrate
和php artisan migrate:back
【讨论】:
这是一个非常快速简单的解决方案。不必再考虑它,也不必有不同的 bash 脚本......只需将您的迁移放在子文件夹中并运行。 $this 应该是批准的答案path
参数只是一种解决方法:)
会不会出现迁移文件没有按顺序调用的情况?图片你有 subfolder1/2018-10.php
, subfolder1/2018-12.php
和 ``subfolder2/2018-11.php. WIll the migration files stil be called as
2018-10,
2018-11` 和 2018-12
?
@Adam - 我刚刚在 Laravel 5.4 上尝试过,它根据文件名按顺序排列文件。因此,无论它们来自哪个目录,它都会根据文件名(即2020_07_22_create....
)运行它们。
@turtlechief 是的,我也有同样的经历【参考方案8】:
我重写了 MigrationServiceProvider:
- registerResetCommand()
- registerStatusCommand()
- registerMigrateCommand()
在那里你可以注册你自己的命令:
class MigrateCommand extends Illuminate\Database\Console\Migrations\MigrateCommand
之后你只需要扩展你的目录:
protected function getMigrationPaths()
或者您只是在应用程序启动时注册路径。 在我知道“$this->loadMigrationsFrom”之前,我已经完成了我的解决方案。
【讨论】:
【参考方案9】:一个简单的解决方案是创建一个 Artisan 命令,例如 (migrate:all),
然后在句柄函数中为每个子目录定义迁移命令,如下所述。
Artisan::call('migrate', [
'--path' => '/database/migrations/employee'
]);
【讨论】:
【参考方案10】:您可以使用以下命令递归地执行此操作:
php artisan migrate --path=/database/migrations/**/*
**/*
也称为globstar
在此工作之前,您必须检查您的 bash 是否支持 globstar。
您可以通过执行shopt
并检查globstar
来做到这一点。
大多数服务器发行版默认支持 Globstar,但可能不适用于 MAC。
有关 globstar 的更多信息,请参阅:https://www.linuxjournal.com/content/globstar-new-bash-globbing-option
【讨论】:
经过测试,它不起作用。只是给出一个找不到路径的错误。 @MichaelRyanSoileau 我们已经在生产环境中运行了 2 年,到底什么不适合您?你用的是什么系统? 在 mac 上运行 PHP 7.3,Laravel 版本 5.5。每次我尝试这样做时,它都是无操作的。 :( 好吧,我做了一些研究,结果表明 Mac 的 bash 不支持开箱即用的 globstar (apple.stackexchange.com/questions/291287/…)。我自己正在运行宅基地/流浪者并在虚拟框中使用终端。但是,如果您使用的是 Mac 的终端 globstar,则本机不支持。我将相应地编辑我的答案 啊,解释完了。感谢您的尽职调查。【参考方案11】:只有相对路径对我有用(在 Laravel 5.7 中):
php artisan migrate --path=database/migrations/your-folder-with-migrations
【讨论】:
【参考方案12】:你可以试试这个包nscreed/laravel-migration-paths。默认情况下,migrations 文件夹内的所有子目录 将被自动加载。即使您可以非常轻松地添加任何目录。
'paths' => [
database_path('migrations'),
'path/to/custom_migrations', // Your Custom Migration Directory
],
不需要任何特殊命令,只需通用:php artisan migrate
即可完成您的任务。
【讨论】:
这是一个不错的包,我正在我当前的项目中使用它。如果您添加了黑名单功能会更好。在我目前的项目中,我真的不需要它。然而,在研究这个功能时,我遇到了对 Laravel 的拒绝功能请求,其中一个原因是人们经常使用一个名为“存档”的子文件夹来存储旧的迁移文件。您可能还希望默认将其列入黑名单。否则,感谢您的出色工作 感谢您的建议。 :-)【参考方案13】:这适用于 laravel 8
php artisan migrate --path=database/migrations/tenant
【讨论】:
【参考方案14】:无需更改,只要您需要,请使用以下命令:
php artisan migrate --path=database/migrations/*
如果你想要一个快捷方式,你可以在你的 composer.json 中包含它:
"scripts":
"migrate": [
"@php artisan migrate --force --path=database/migrations/*"
]
然后在终端中使用composer migrate
。
【讨论】:
在 Windows 上无法通过 Laravel 安装程序安装 Laravel 4.2?
】在Windows上无法通过Laravel安装程序安装Laravel4.2?【英文标题】:InstallingLaravel4.2viaLaravelinstallernotpossibleonwindows?【发布时间】:2015-04-0713:43:09【问题描述】:通过laravel安装程序在Windows上安装laravel时,使用命令composerglobalrequire&qu... 查看详情
在 laravel 项目中运行“laravel new”命令
】在laravel项目中运行“laravelnew”命令【英文标题】:Running"laravelnew"commandinlaravelproject【发布时间】:2019-12-2912:17:04【问题描述】:我不小心在一个laravel项目中运行了laravelnew命令,显然删除了autoload_real.php我在运行phpartis... 查看详情
如何在 Windows 上通过 Laravel Installer 安装 Laravel?
】如何在Windows上通过LaravelInstaller安装Laravel?【英文标题】:HowtoinstallLaravelviaLaravelInstalleronWindows?【发布时间】:2014-12-1413:57:42【问题描述】:我正在尝试使用LaravelInstaller方法在Windows上安装Laravel框架。在thedocumentation我发现了... 查看详情
在 Mac 上安装 Laravel 会抛出 laravel,即使在设置 PATH 后也找不到
】在Mac上安装Laravel会抛出laravel,即使在设置PATH后也找不到【英文标题】:LaravelinstallationonamacthrowslaravelnotfoundevenaftersettingthePATH【发布时间】:2015-06-0215:19:18【问题描述】:我正在尝试使用laravel.com安装页面上提到的作曲家在Mac... 查看详情
Laravel 在控制器中使用非 Laravel Composer 包
】Laravel在控制器中使用非LaravelComposer包【英文标题】:Laravelusenon-laravelcomposerpackageincontroller【发布时间】:2015-05-2303:41:36【问题描述】:我正在尝试在Laravel控制器中使用非laravel作曲家包。我已将项目添加到composer.json文件中,... 查看详情
Laravel 如何在会话 Laravel 中存储额外的数据/值
】Laravel如何在会话Laravel中存储额外的数据/值【英文标题】:LaravelHowtostoreextradata/valueinsessionLaravel【发布时间】:2016-10-0212:15:00【问题描述】:我在laravel登录中使用默认auth()(电子邮件和密码)现在我尝试在(年龄或城市)等... 查看详情
在 Laravel 4 上使用非 laravel 包
】在Laravel4上使用非laravel包【英文标题】:Usinganon-laravelpackageonLaravel4【发布时间】:2013-02-1721:42:25【问题描述】:是否可以在框架中包含不是专门为L4设计的包?如果是这样,它是如何完成的?我知道我需要将包添加到我的compos... 查看详情
Laravel:如何在 Laravel 中找到公用文件夹?
】Laravel:如何在Laravel中找到公用文件夹?【英文标题】:Laravel:HowtolocatedpublicfolderinLaravel?【发布时间】:2020-09-1406:32:34【问题描述】:所以我使用它来将我的图像保存在文件fylesystems.php中并且它可以工作,但是现在我想部署我... 查看详情
在 laravel 中创建一个下拉列表来选择用户角色 - laravel
】在laravel中创建一个下拉列表来选择用户角色-laravel【英文标题】:Creatingadropdownlistinlaraveltoselectausersrole-laravel【发布时间】:2020-06-0621:30:44【问题描述】:我正在使用laravel创建一个网站,我有一个创建新用户的表单,在其中我... 查看详情
为啥在 RegisterController 中创建函数在 laravel 中不起作用
】为啥在RegisterController中创建函数在laravel中不起作用【英文标题】:WhycreatefunctioninRegisterControllerisnotworkinginlaravel为什么在RegisterController中创建函数在laravel中不起作用【发布时间】:2021-12-0311:00:27【问题描述】:我是Laravel的新... 查看详情
Laravel - 在数据库中保存或插入图像数组 - Laravel
】Laravel-在数据库中保存或插入图像数组-Laravel【英文标题】:Laravel-SavingorInsertingArrayofImagesinDatabase-Laravel【发布时间】:2019-04-2111:17:21【问题描述】:我想将我的图像保存在我使用数组的数据库mysql上,我可以插入一些东西,但... 查看详情
如何在 Laravel 8 中使用 srmklive/laravel-paypal v3
】如何在Laravel8中使用srmklive/laravel-paypalv3【英文标题】:Howtousesrmklive/laravel-paypalv3inLaravel8【发布时间】:2021-06-1022:46:27【问题描述】:我在laravel项目中使用srmklive/laravel-paypalv.3包(https://github.com/srmklive/laravel-paypal没有文档)。... 查看详情
Laravel 通过使用多态关系在 Laravel 中查询(函数 find() )
】Laravel通过使用多态关系在Laravel中查询(函数find())【英文标题】:Laravelqueries(functionfind())inLaravelthroughtusingpolymorphicralationship【发布时间】:2020-12-0110:01:21【问题描述】:我是Laravel的新手,对通过使用多态关系进行LaravelSQL查... 查看详情
如何在laravel中删除公共文件夹
】如何在laravel中删除公共文件夹【英文标题】:howtoremovefolderpublicinlaravel【发布时间】:2014-03-2410:12:41【问题描述】:我在位于http://localhost/laravel的xampp上设置了laravel但要测试它,我必须去localhost/laravel/public我如何摆脱/public?... 查看详情
使用 nginx 在 laravel forge 上集成 Laravel 5.2 wordpress
】使用nginx在laravelforge上集成Laravel5.2wordpress【英文标题】:Laravel5.2wordpressintegrationonlaravelforgeusingnginx【发布时间】:2016-07-2112:00:38【问题描述】:我有一个在laravelforge上构建和托管的laravel5.2网络应用程序。到目前为止没问题,... 查看详情
Laravel:在迁移之前删除迁移:重置
】Laravel:在迁移之前删除迁移:重置【英文标题】:Laravel:Deletemigrationbeforemigrate:reset【发布时间】:2017-09-0320:27:48【问题描述】:我是Laravel的新手。我正在尝试使用以下命令重置数据库中的所有表:phpartisan迁移:重置不幸的是... 查看详情
如何在 laravel 中实现 vuetify?
】如何在laravel中实现vuetify?【英文标题】:Howtoimplementvuetifyinlaravel?【发布时间】:2018-07-2123:32:58【问题描述】:我是vuetify的新手,我试图在laravel中实现它。有人已经在laravel中实现了vuetify,可以告诉我怎么做吗?我已经安装... 查看详情
Laravel - 如何在本地开发中使用 https 服务 laravel 项目
】Laravel-如何在本地开发中使用https服务laravel项目【英文标题】:Laravel-howtoservelaravelprojectwithhttpsonlocaldevelopment【发布时间】:2021-02-1503:17:49【问题描述】:我在Google上搜索了很多关于使用https服务的解决方案。即使我尝试了ngrok... 查看详情