PHP的工匠迁移没有做任何事情

时间:2018-09-04 10:03:52

标签: php laravel artisan artisan-migrate

我已经在Macbook Pro(运行High Sierra(10.13.6))上使用Homebrew安装了Laravel 5和Valet(v2.0.12)。我已经下载了一个干净的Laravel项目(laravel new blog)。

当我尝试迁移时(坐在项目文件夹中,然后使用php artisan migrate),什么都没有发生。终端只是坐在那里无所事事。命令正在执行,但是什么也没有。没有错误,没有成功,什么都没有。甚至加上-v也无济于事。

我能够通过命令行进入服务器。我已经在.env文件中输入了正确的凭据。我什至可以运行其他php artisan命令,但所有migrate命令都无能为力。

我的迁移文件是:

2018_09_04_100609_create_users_table.php

<?php

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

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

2018_09_04_100659_create_password-resets_table.php

<?php

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

class CreatePasswordResetsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('password_resets', function (Blueprint $table) {
            $table->string('email')->index();
            $table->string('token');
            $table->timestamp('created_at')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('password_resets');
    }
}

更新

使用以下方法检查数据库连接:

try {
    DB::connection();
    die("success!");
} catch (\Exception $e) {
    die("Could not connect to the database.  Please check your configuration. error:" . $e );
}

我得到“成功!”。

但是随后我将DB::connection()更改为DB::connection()->getPdo(),它又什么也不做。还是不相关?

2 个答案:

答案 0 :(得分:0)

我把它修好了。在那之后,我会添加很多感叹号,但是我不喜欢它。为什么?

因为问题是我正在使用MySQL,而我应该一直在使用MariaDB。该指南在任何地方都没有提及,因此我仅假设MySQL就足够了。显然不是。如果错误显示出类似这样的信息,那会很好...

答案 1 :(得分:0)

我遇到了一个类似的问题,其中没有任何迁移选项或迁移本身起作用,而且我没有收到命令似乎挂起的错误。在浏览此页面并进行了很多其他尝试后,我从 MySQL 切换到了 MariaDB。这终于奏效了。

我就是这样做的。在这篇文章之后:- How To Install MariaDB on Ubuntu 20.04(我将它安装到 digitalocean 上的一个 Droplet,但我相信这个概念对任何人都有帮助。

安装 MariaDB:

sudo apt update
sudo apt install mariadb-server
sudo mysql_secure_installation

打开 MariaDB 并创建管理员用户:

sudo mariadb
GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

测试以确保数据库按需要运行:

sudo systemctl status mariadb

如果没有运行:

sudo systemctl start mariadb

有关完整说明,请访问我分享的链接

此外,如果您已经安装了 MySQL,则必须将其删除,否则会在您重新启动时导致 MariaDB 失败。后来我遇到了这个问题,当我尝试启动它时,MariaDB 一直挂着,我在浏览器上遇到了 MYSQL 2002 错误。方法如下 -

sudo systemctl stop mariadb
echo "/usr/sbin/mysqld { }" | sudo tee /etc/apparmor.d/usr.sbin.mysqld
sudo apparmor_parser -v -R /etc/apparmor.d/usr.sbin.mysqld

运行这些命令应该会显示

Removal succeeded for "/usr/sbin/mysqld".

然后,运行这个

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld

最后重启mariadb

sudo systemctl start mariadb

现在一切都应该运行良好,即使在重新启动后也会保留。