Laravel 回滚特定数据库

Posted

技术标签:

【中文标题】Laravel 回滚特定数据库【英文标题】:Laravel Rollback specific database 【发布时间】:2018-09-26 20:08:13 【问题描述】:

我尝试回滚我的数据库系统 php artisan migrate:rollback --database='system'

但它似乎不像迁移php artisan migrate --database='system 那样工作

你能不能帮我看看发生了什么。

这里是我的 config/database.php

'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix' => '',
    ],

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'port'      => env('DB_PORT', '4444'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
        'engine'    => null,
    ],

    'system' => [
        'driver' => 'mysql',
        'host' => env('SYSTEM_DB_HOST', 'localhost'),
        'port' => env('SYSTEM_DB_PORT', '4444'),
        'database' => env('SYSTEM_DB_DATABASE', 'forge'),
        'username' => env('SYSTEM_DB_USERNAME', 'forge'),
        'password' => env('SYSTEM_DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],

这是我的 .env 文件。

#-----------------------------------------------------
# CLIENT DB CONNECTION
#-----------------------------------------------------
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=databaseNameClient
DB_USERNAME=homestead
DB_PASSWORD=secret

#-----------------------------------------------------
# SYSTEM DB CONNECTION
#-----------------------------------------------------
DB_CONNECTION=system
SYSTEM_DB_HOST=127.0.0.1
SYSTEM_DB_PORT=3306
SYSTEM_DB_DATABASE=databaseNameSystem
SYSTEM_DB_USERNAME=homestead
SYSTEM_DB_PASSWORD=secret

这是我尝试迁移时收到的消息错误:rollback --database='system':

[Symfony\Component\Debug\Exception\FatalThrowableError]
  Call to undefined method Illuminate\Database\Schema\MySqlBuilder::dddconnection()

我的堆栈跟踪的最后几行是:

#23 /vendor/symfony/console/Application.php(117): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 /vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(107): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#25 /artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#26 main  
[2018-04-17 00:51:07] local.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined method Illuminate\Database\Schema\MySqlBuilder::dddconnection() in /vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:217

【问题讨论】:

dddconnection 来自哪里?您是否不小心修改了一些供应商文件而忘记还原? 我不知道我找不到来自哪里。不,我没有找任何供应商 【参考方案1】:

您不小心更改了 vendor 文件夹中的方法。

第 1 步。

删除供应商文件夹。

第 2 步。

运行

composer install

它将再次安装所有库并覆盖更改。

希望对你有帮助

【讨论】:

【参考方案2】:

如果不查看完整的错误日志很难说,但是如果您通过提供这样的特定数据库连接来为迁移创建向下方法

Schema::connection('mysql2')->create('some_table', function($table)

$table->increments('id'):
);

那么只有php artisan migrate:rollback 可以完美地解决这个问题。

【讨论】:

【参考方案3】:
If you look in your migrations table, then you’ll see each migration 
 has a batch number. So when you roll back, it rolls back each 
 migration that was part of the last batch.

If you only want to roll back the very last migration, then just 
increment the batch number by one. Then next time you run the rollback 
    command, it’ll only roll back that one migration as it’s in a “batch” of 
 its own.

更多请关注网址: Rollback one specific migration in Laravel

【讨论】:

【参考方案4】:

您好,感谢大家抽出宝贵时间回答我的问题。我发现发生了什么事。在我的一次迁移中,在向下功能中,我有一个功能拼写错误

         public function down()

    if (Schema::dddconnection('system')->hasTable('apiservices_categories_translations')) 
        Schema::connection('system')->dropIfExists('apiservices_categories_translations');
    

【讨论】:

以上是关于Laravel 回滚特定数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何迁移:在 laravel 5 中回滚特定表

laravel数据库事务回滚

Laravel 4.2 - 多个数据库的事务回滚问题

播种数据库后的laravel种子回滚

laravel 迁移:回滚错误

Laravel 删除表,迁移不回滚