gpt4 book ai didi

php - Laravel 5 动态运行迁移

转载 作者:可可西里 更新时间:2023-11-01 13:06:50 25 4
gpt4 key购买 nike

所以我在 Packages/Sitemanager/Blog 结构中创建了我自己的博客包我有一个如下所示的服务提供商:

namespace Sitemanager\Blog;

use Illuminate\Support\ServiceProvider as LaravelServiceProvider;

class BlogServiceProvider extends LaravelServiceProvider {

/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = false;

/**
* Bootstrap the application events.
*
* @return void
*/
public function boot() {

$this->handleConfigs();
$this->handleMigrations();
$this->handleViews();
$this->handleRoutes();
}

/**
* Register the service provider.
*
* @return void
*/
public function register() {

// Bind any implementations.
$this->app->make('Sitemanager\Blog\Controllers\BlogController');
}

/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides() {

return [];
}

private function handleConfigs() {

$configPath = __DIR__ . '/config/blog.php';

$this->publishes([$configPath => config_path('blog.php')]);

$this->mergeConfigFrom($configPath, 'blog');
}

private function handleTranslations() {

$this->loadTranslationsFrom(__DIR__.'/lang', 'blog');
}

private function handleViews() {

$this->loadViewsFrom(__DIR__.'/views', 'blog');

$this->publishes([__DIR__.'/views' => base_path('resources/views/vendor/blog')]);
}

private function handleMigrations() {

$this->publishes([__DIR__ . '/migrations' => base_path('database/migrations')]);
}

private function handleRoutes() {

include __DIR__.'/routes.php';
}
}

现在,我想做的是动态运行迁移,如果它们从未在我想的安装过程之前或之内运行过的话。我在旧文档中看到你可以这样:

Artisan::call('migrate', array('--path' => 'app/migrations'));

但是,这在 laravel 5 中是无效的,我该如何处理呢?

最佳答案

Artisan::call('migrate', array('--path' => 'app/migrations'));

将在 Laravel 5 中工作,但您可能需要进行一些调整。

首先,由于 Laravel 5,您需要在文件顶部添加 use Artisan; 行(其中 use Illuminate\Support\ServiceProvider... 是)命名空间。 (您也可以执行 \Artisan::call - \ 很重要)。

您可能还需要这样做:

Artisan::call('migrate', array('--path' => 'app/migrations', '--force' => true));

--force 是必需的,因为默认情况下,Laravel 会提示您在生产中选择是/否,因为它是一个潜在的破坏性命令。如果没有 --force,您的代码将只是坐在那里旋转它的轮子(Laravel 正在等待 CLI 的响应,但您不在 CLI 中)。 p>

enter image description here

我鼓励您在服务提供商的 boot 方法之外的地方 做这些事情。这些可能是繁重的调用(依赖于您不想在每次页面浏览时都进行的文件系统和数据库调用)。考虑使用显式安装控制台命令或路由。

关于php - Laravel 5 动态运行迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37953783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com