Laravel迁移不会在数据库

时间:2018-02-08 10:10:13

标签: php laravel migration

我在文件2018_02_08_094356_create_currency_table.php中添加了一个新表格。

这是代码:

<?php

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

class CreateCurrencyTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('currency', function (Blueprint $table) {
            $table->increments('id');
            $table->decimal('usdeur', 15, 2);
            $table->decimal('usdchf', 15, 2);
            $table->timestamps();
        });
    }

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

当我运行php artisan migrate时,我的数据库中只有默认的laravel用户(和迁移)表。没有货币一。

可能是什么原因?

修改

迁移一切都很顺利。问题是:

  

[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长;最大密钥长度   是767字节(SQL:alter table users添加唯一   users_email_unique(电子邮件))

     

[PDOException] SQLSTATE [42000]:语法错误或访问冲突:1071   指定密钥太长;最大密钥长度为767字节

解决方案是在AppServiceProvider.php

中添加此内容
public function boot()
{
    Schema::defaultStringLength(191);
}

来源:https://laravel-news.com/laravel-5-4-key-too-long-error

3 个答案:

答案 0 :(得分:1)

您需要先运行composer du来注册迁移类。

然后运行php artisan migrate命令执行新的迁移。

答案 1 :(得分:1)

打开AppServiceProvider.php 写下面的代码:

<div class="class1" id="id1" data-ng-click="click1(arg)" data-ng-class="{ 'class2': expression, 'class3': expression, 'class4': expression }">

表名必须为复数 使用

回滚迁移
public function boot()
{
    Schema::defaultStringLength(191);
}

从数据库和迁移表中手动删除该表 并尝试以下代码:

php artisan migrate:rollback

代码:

migration command:
php artisan make:migration create_currencies_table

现在运行

class CreateCurrenciesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('currencies', function (Blueprint $table) {
            $table->increments('id');
            $table->decimal('usdeur', 15, 2);
            $table->decimal('usdchf', 15, 2);
            $table->timestamps();
        });
    }

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

答案 2 :(得分:0)

所有迁移记录都记录在表迁移中。它表示您之前已创建它。因此,删除表迁移中有关货币的记录并再次运行php artisan migrate。更重要的是,刷新您的数据库并检查表格货币是否已创建。