Laravel 外键约束格式不正确我已经搜索过,找不到答案
Posted
技术标签:
【中文标题】Laravel 外键约束格式不正确我已经搜索过,找不到答案【英文标题】:Laravel foreign key constraint is incorrectly formed I have searched and cannot find the answer 【发布时间】:2020-04-23 07:12:48 【问题描述】:class CreateMediaTable extends Migration
public function up()
Schema::create('media', function (Blueprint $table)
$table->increments('id');
$table->unsignedBigInteger('id_users');
$table->unsignedBigInteger('id_posts');
$table->char('type', 1); //P: photo or V: video
$table->string('file');
$table->timestamps();
$table->foreign('id_posts')->references('id')->on('posts');
$table->foreign('id_users')->references('id')->on('users');
);
public function down()
Schema::dropIfExists('posts');
还有我的 createprofilemigration
/**
* @author Alex Madsen
*
* @date November 6, 2018
*/
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUserProfilesTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::create('user_profiles', function (Blueprint $table)
$table->unsignedInteger('id_users')->unique();
$table->string('handle')->unique();
$table->string('icon')->default('https://i.redd.it/130am13nj6201.png');
$table->string('profile_image')->nullable();
$table->string('description')->nullable();
$table->timestamps();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::dropIfExists('user_profiles');
不断抛出这些错误,我错过了什么?请注意,我对此很陌生,在我的休息时间尝试使用 youtube 和 *** 学习。不知道该走哪条路。我查看了论坛并尝试了 $table->foreign('id_posts')->references('id')->on('posts');但它并没有解决问题。
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1005 Can't create table `ci`.`media` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter t
able `media` add constraint `media_id_posts_foreign` foreign key (`id_posts`) references `posts` (`id`))
at C:\xampp6\htdocs\lol\simple_social_network_laravel\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e)
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667|
class CreatePostsTable extends Migration
public function up()
Schema::create('posts', function (Blueprint $table)
$table->increments('id');
$table->unsignedBigInteger('id_users');
$table->unsignedInteger('subreddit_id');
$table->text('description');
$table->string('title');
$table->text('content');
$table->unsignedInteger('id_posts');
$table->timestamps();
$table->foreign('id_users')->references('id')->on('users');
$table->foreign('subreddit_id')->references('id')->on('id_posts');
);
public function down()
Schema::dropIfExists('posts');
【问题讨论】:
您能否将您的posts
迁移代码添加到?
已修复,抱歉第一次发帖。
在您的media
迁移中编辑您的posts_id
到unsignedInteger
成为这样的$table->unsignedInteger('id_posts');
【参考方案1】:
使用外键时的类型应该完全相同。
你创造:
$table->unsignedBigInteger('id_posts');
所以它是无符号大整数,但可能在 posts
表中而不是 bigIncrements
中,您只使用 increments
作为 id
列,这就是您收到此错误的原因。
所以很有可能代替:
$table->unsignedBigInteger('id_posts');
你应该使用
$table->unsignedInteger('id_posts');
或作为替代解决方案使用
$table->bigIncrements('id');
在posts
迁移中
【讨论】:
@Insomniakinn 是的,所以在回答你有解决方案你应该改变什么$table->increments('id'); $table->unsignedInteger('id_users'); $table->unsignedInteger('id_posts'); $table->char('type', 1); //P: photo or V: video $table->string('file'); $table->timestamps(); $table->foreign('id_posts')->references('id')->on('posts'); $table->foreign('id_users')->references('id')->on('users');
它仍然抛出同样的错误。当然,我是编码新手,在休息日学习,所以我确信用户错误。
@Insomniakinn 你确定错误是一样的吗?您应该只在单个文件中进行更改,而不是在两个文件中进行更改,它应该可以工作
我继续将代码上传到 git,不确定是否有大图有帮助。 github.com/Wildindfw/mylaraveltest【参考方案2】:
在您的posts
迁移中,您将id
与increments
这意味着它需要
unsigned integer auto_increment
但是在您迁移media
文件时,您使用unsignedBigInteger
创建了一个posts_id
所以有两种方法可以解决这个问题,只能选择一个
-
将
posts
迁移中的id
编辑为bigincrements
在“媒体”迁移中编辑您的posts_id
到unsignedIntegere
【讨论】:
以上是关于Laravel 外键约束格式不正确我已经搜索过,找不到答案的主要内容,如果未能解决你的问题,请参考以下文章