首页 文章

Laravel SQL无法创建表[重复]

提问于
浏览
2

这个问题在这里已有答案:

我试图将一些文件迁移到数据库(phpmyadmin),但是我'm getting this error: [Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1005 Can' t创建表'loja.#sql-38f_25f'(错误号:150)(SQL:alter table encomenda add c onstraint encomenda_username_foreign foreign key( username )references usersusername ))

这是我的表“encomenda”:

<?php

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

class CreateEncomendaTable extends Migration {

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    // Creates the encomenda table
    Schema::create('encomenda', function($table)
    {
        $table->engine = 'InnoDB';
        $table->increments('IDEncomenda')->unsigned();
        $table->integer('id')->unsigned();
        $table->foreign('id')->references('id')->on('users')->onDelete('cascade');
        $table->string('editora');
    });
}

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

}

在错误消息中,它表示它无法创建表'loja',但没有在此文件中的位置引用'loja' . 我确实想创建一个表'loja',以防万一,这是代码:

<?php

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

class CreateLojaTable extends Migration {

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('loja', function($table)
    {
        $table->engine = 'InnoDB';
        $table->primary('api_key');
    });
}

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

}

用户表迁移:

<?php
use Illuminate\Database\Migrations\Migration;

class ConfideSetupUsersTable extends Migration {

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    // Creates the users table
    Schema::create('users', function($table)
    {
        $table->engine = 'InnoDB';
        $table->increments('id')->unsigned();
        $table->string('username')->unique();
        $table->string('email');
        $table->string('password');
        $table->string('confirmation_code');
        $table->string('remember_token')->nullable();
        $table->boolean('confirmed')->default(false);
        $table->boolean('admin')->default(false);
        $table->timestamps();
    });


    // Creates password reminders table
    Schema::create('password_reminders', function($table)
    {
        $table->engine = 'InnoDB';
        $table->string('email');
        $table->string('token');
        $table->timestamp('created_at');
    });
}

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

}

现在这是我的表'linhaItem'迁移:

<?php

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

class CreateLinhaItemTable extends Migration {

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('linhaItem', function($table)
    {
        $table->engine = 'InnoDB';
        $table->increments('IDLinha')->unsigned();
        $table->integer('IDDisco')->unsigned();
        $table->integer('IDCarrinho')->unsigned();
        $table->double('preco');
        $table->integer('quantidade');
        $table->foreign('IDDisco')->references('IDDisco')->on('disco')->onDelete('cascade');
        $table->foreign('IDCarrinho')->references('IDCarrinho')->on('carrinho')-onDelete('cascade');
    });
}

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

}

谁知道什么是错的?
编辑:我添加了 - > onDelete('cascade')到外键,但我得到了同样的错误 .
EDIT2:我在'encomenda'文件的id列中添加了unsigned,但现在我已经'm still getting the same error, but with the ' linhaItem'表迁移了 .

2 回答

  • 0

    你有几个问题:

    • users 迁移:

    $table->unique('username'); 语句用于创建唯一索引,而不是列:http://laravel.com/docs/4.2/schema#adding-indexes

    将其更改为: $table->string('username')->unique(); - 这将为其添加列和唯一索引 .

    • encomenda 迁移:

    $table->string('username')->unsigned();unsigned 仅用于整数,不能使字符串无符号 .

    使用与 users migration中相同的代码: $table->string('username')->unique();

  • 0

    我解决了这个问题 . 问题是我正在尝试迁移表,这些表具有尚未迁移的表的外键 . 我刚刚重命名了所有文件,以便将它们放入可行的顺序中 .

相关问题