artisan migrate 命令不迁移,不产生输出

Posted

技术标签:

【中文标题】artisan migrate 命令不迁移,不产生输出【英文标题】:artisan migrate command doesn't migrate, produces no output 【发布时间】:2017-06-01 20:12:03 【问题描述】:

我正在做我的第一个 Laravel 项目。我正在尝试创建数据库迁移并使用artisan migrate 运行它们。迁移未运行,并且该命令不返回任何输出。

关键事实:

我使用artisan make:migration 创建了具有正确文件路径的迁移文件。 我第一次运行该命令时,它在数据库中创建了迁移表。所以我知道它正在访问数据库,并且至少做了一些正确的事情。 当database/migrations 文件夹中没有文件时,我会收到Nothing to migrate 命令。 除了这两条消息之外,我根本没有收到命令的任何输出。没有错误,什么都没有。此外,数据库中的迁移表中没有记录。 artisan migrate --verbose 也不返回任何输出。 storage/logs 的权限是drwxrwxrwx. 我是目录的所有者。 storage/logs/laravel.log 不包含与迁移有关的任何内容。

我在下面包含了我第一次迁移的代码。

这个问题与this question 的不同之处在于之前的用户没有使用正确的命名约定。该问题包含有关迁移过程的详细答案。这没有帮助,因为我没有得到任何输出。在我输入此问题时,我还查看了 SO 建议的问题。

也许我的某些配置不正确?我需要做什么才能使这些迁移运行?

2017_01_17_151638_user.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

// Create the classes associated with user management.

class UserMigration extends Migration

    public function up()
    
      Schema::create('tblUser', function (Blueprint $table) 
          $table->increments('id');
          $table->string('name');
          $table->string('email')->unique();
          $table->string('password');
          $table->rememberToken();
          $table->timestamps();
      );

      Schema::create('tblUserPasswordReset', function (Blueprint $table) 
          $table->string('email')->index();
          $table->string('token')->index();
          $table->timestamp('create_date')->nullable();
      );
    

    public function down()
    
      Schema::dropIfExists('tblUserPasswordReset');
      Schema::dropIfExists('tblUser');
    

【问题讨论】:

确保/storage/logs文件夹是可写的;它可能会遇到错误并尝试将其记录在那里,并且根据您的开发环境,它可能无法正确通信。除此之外,可能还包括运行命令的终端的屏幕截图。 在我的例子中是 XDebug 监听和停止脚本。禁用侦听器后,该命令顺利通过。 【参考方案1】:

我认为迁移的类名应该是 User 而不是 UserMigration 因为 laravel 使用文件名查找类,并且您的文件有一个 slug 用户而不是用户迁移。

【讨论】:

【参考方案2】:

本月早些时候我遇到了这个问题,我所做的是我仔细检查了对 mysql 服务器的配置,然后重新启动了 mysql 服务器和 IDE 本身

【讨论】:

【参考方案3】:

我很确定我刚刚发现了问题。

我在 MySQL 中创建了一个新用户,并通过 mysql shell 为所有数据库分配了所有权限:

CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password';

GRANT ALL ON *.* to 'user1'@'localhost';

不要忘记更改 .env 中的连接信息:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=user1
DB_PASSWORD=password

【讨论】:

【参考方案4】:

对我来说,让它工作的唯一方法是重新启动 mysql 服务(在 OSX 中,从未在 debian 上看到过这个)。

【讨论】:

在debian上重启mysql服务也解决了这个问题。【参考方案5】:

我能够重现迁移运行没有错误但不迁移的情况的唯一方法是没有在配置中指定数据库架构名称以及连接名称。

.env 文件中确保以下设置具有值:

DB_CONNECTION=master
DB_DATABASE=my_databse_name

或者在 /config/database.php 中:

'default' => env('DB_CONNECTION', 'master'),

'connections' => [

        'master' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'my_databse_name'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => 'cms_',
            'strict' => true,
            'engine' => null,
        ],
],

【讨论】:

【参考方案6】:

遇到了这个确切的问题,列出的解决方案都没有改变任何东西。在这种情况下对我有用的未提及的解决方案是

composer update --no-scripts

我已经清除了所有内容并从头开始,忘记重新初始化作曲家并安装所有内容。

【讨论】:

【参考方案7】:

不要错过将您的迁移添加到 DatabaseSeeder.php。请参阅本文档Calling Additional Seeders。

在 DatabaseSeeder 中添加:

$this->call(UserMigration::class);

希望对你有帮助。

【讨论】:

【参考方案8】:

试试

php artisan migrate:rollback

那就试试

php artisan migrate

Laravel 会跟踪运行的迁移,所以如果你之前运行过它,它知道并且不会再次执行它,除非你回滚它,我遇到了这个,直到我回滚它们然后再次运行迁移

【讨论】:

无效。 php artisan migrate:rollback 报告Nothing to rollbackphp artisan migrate 之后什么也不做。迁移表仍然是空的。 make:migration create_thetable.php 【参考方案9】:

试试看:composer dump-autoload

然后再次运行php artisan migrate

可能的问题:https://***.com/a/33974248/7377984

【讨论】:

无效。 composer dump-autoload 报告 Generating autoload files,但仍然没有对 php artisan migrate 采取任何行动。 尝试php artisan clear-compiled,然后是composer dump-autoload,然后是php artisan optimize,最后是php artisan migrate【参考方案10】: 首先检查您的服务 Apache 和 Mysql 运行通过转到您的 本地主机/phpmyadmin。 检查您的终端或 cmd 是否在正确的文件路径中 目录。 然后写php artisan migrate 如果有显示,请在此处告诉我,如果没有转到您的 laravel.log 以获取 详情

【讨论】:

【参考方案11】:

仔细检查以下内容:

迁移文件实际上是在database/migrations中创建的 仔细检查日志文件和目录是否可写 确保 database/migrations 文件夹的权限是 laravel 安装附带的默认权限 仔细检查 laravel.log 文件

【讨论】:

迁移文件在database/migrationsstorage/logs 目录的权限是 drwxrwxrwx. laravel.log 文件有一些较旧的条目,但与迁移无关。

以上是关于artisan migrate 命令不迁移,不产生输出的主要内容,如果未能解决你的问题,请参考以下文章

为啥 php artisan 啥都不迁移?

Laravel Artisan Migrate 命令创建表但不将每个迁移文件填充到迁移表

使用“php artisan migrate”命令时 Laravel 数据库迁移外键错误

php artisan migrate 不适用于 Laravel 5.4 中的 XAMPP

Laravel - php artisan migrate 不起作用

无法在 Php Storm 终端中运行 php artisan migrate:refresh 命令