<分区>
我正在使用 Laravel 框架,我正在尝试将一些文件迁移到数据库 (phpmyadmin),但出现此错误:
[照亮\数据库\查询异常]
SQLSTATE[HY000]: 一般错误: 1005 无法创建表 'loja.#sql-38f_25f' (errno: 150) (SQL: alter table encomenda
add c
onstraint encomenda_username_foreign 外键 (username
) 引用 users
(username
))
这是我的表“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,但现在我仍然遇到同样的错误,但随着 'linhaItem' 表迁移。