我想为我的laravel 5.8项目构建Chatter软件包,但是在此迁移文件中出错,它试图用数据库名称创建表,不知道为什么请尝试帮助
2016_07_29_171128_create_foreign_keys.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateForeignKeys extends Migration
{
public function up()
{
Schema::table('chatter_discussion', function (Blueprint $table) {
$table->foreign('chatter_category_id')->references('id')->on('chatter_categories')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')
->onDelete('cascade')
->onUpdate('cascade');
});
Schema::table('chatter_post', function (Blueprint $table) {
$table->foreign('chatter_discussion_id')->references('id')->on('chatter_discussion')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')
->onDelete('cascade')
->onUpdate('cascade');
});
}
public function down()
{
Schema::table('chatter_discussion', function (Blueprint $table) {
$table->dropForeign('chatter_discussion_chatter_category_id_foreign');
$table->dropForeign('chatter_discussion_user_id_foreign');
});
Schema::table('chatter_post', function (Blueprint $table) {
$table->dropForeign('chatter_post_chatter_discussion_id_foreign');
$table->dropForeign('chatter_post_user_id_foreign');
});
}
}
答案 0 :(得分:0)
外键的格式必须与它所引用的键完全相同。
id通常是int且未签名。
所以我建议您将user_id列创建为:
$table->integer('user_id')->unsigned();
答案 1 :(得分:0)
发生此错误是因为foreign_key
与目标表具有不同的数据类型。
默认情况下,Laravel使用increments()
作为表的默认id
。它将创建一个名为id
的列,其数据类型为unsigned integer
。
您需要使用unsigned integer
定义一列才能创建约束。
根据Laravel Docs,您需要执行以下操作
...
// Create a column with unsigned integer as type
$table->unsignedInteger('chatter_category_id');
// Then you can assign it properly
$table->foreign('chatter_category_id')
->references('id')
->on('chatter_categories')
->onDelete('cascade')
->onUpdate('cascade');
....
答案 2 :(得分:0)
如果使用laravel 5.8,则id的默认字段为 bigIncrements 。
像这样:
$table->bigIncrements('id');
,并且必须将 unsignedBigInteger 类型用于外键字段。
像这样:
$table->unsignedBigInteger('chatter_category_id');
祝你好运。
答案 3 :(得分:0)
更改Laravel版本,可以肯定使用,laravel 5.8出现问题
尝试这样
Schema::table('posts', function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});