laravel 8(错误号:150 "Foreign key constraint is incorrectly formed")
laravel 8 (errno: 150 "Foreign key constraint is incorrectly formed")
我尝试在上次 php 和 laravel 8 中创建论坛。我在 laravel 8 购买了 udemy 的课程,我关注他的视频,但我的电脑有错误,视频没有
2021_11_13_000535_create_posts_table
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->integer('is_deleted');
$table->integer('is_approved');
$table->string('image');
$table->unsignedBigInteger('discussion_id');
$table->foreign('discussion_id')->references('id')->on('discussions')->onDelete('cascade');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('slug');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
2021_11_19_165302_create_discussions_table
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDiscussionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('discussions', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('desc');
$table->unsignedBigInteger('forum_id');
$table->foreign('forum_id')->references('id')->on('forums')->onDelete('cascade');
$table->integer('is_deleted')->default(0);
$table->string('image')->nullable();
$table->integer('notify')->default(0);
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('discussions');
}
}
当我尝试迁移时 table 我遇到了这个错误:
Migrated: 2014_10_12_000000_create_users_table (1,399.45ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (2,117.91ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (1,592.76ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (2,125.96ms)
Migrating: 2021_11_12_234608_create_categories_table
Migrated: 2021_11_12_234608_create_categories_table (2,452.77ms)
Migrating: 2021_11_12_235039_create_forums_table
Migrated: 2021_11_12_235039_create_forums_table (2,849.71ms)
Migrating: 2021_11_13_000340_create_tags_table
Migrated: 2021_11_13_000340_create_tags_table (526.62ms)
Migrating: 2021_11_13_000535_create_posts_table
Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1005 Can't create table `stsdb`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `posts` add constraint `posts_discussion_id_foreign` foreign key (`discussion_id`) references `discussions` (`id`) on delete cascade)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:703
699▕ // If an exception occurs when attempting to run a query, we'll format the error
700▕ // message to include the bindings with SQL, which will make this exception a
701▕ // lot more helpful to the developer instead of just the database's errors.
702▕ catch (Exception $e) {
➜ 703▕ throw new QueryException(
704▕ $query, $this->prepareBindings($bindings), $e
705▕ );
706▕ }
707▕ }
+9 vendor frames
10 database/migrations/2021_11_13_000535_create_posts_table.php:28
Illuminate\Support\Facades\Facade::__callStatic()
+21 vendor frames
32 artisan:37
Illuminate\Foundation\Console\Kernel::handle()
有人可以解释为什么会出现这个错误以及如何解决这个问题吗?因为我不明白我在我的电脑上的视频中有错误,而视频中没有。有人可以帮助解决这个问题吗?我已经签入 google 但我没有找到如何解决这个问题,我关注 tuts 构建论坛 laravel 8 和电报通知
问题是您对帖子 table 的迁移是 运行 在您的讨论迁移之前。
发生这种情况是因为 Laravel 运行s 迁移按迁移文件名中的时间戳排序:
2021_11_13_000535_create_posts_table -> 13. November
2021_11_19_165302_create_discussions_table -> 19. November
因此,讨论 table 尚未按照我的评论建议创建!
解决方法很简单,将文件名改成:
2021_11_20_000535_create_posts_table -> 20. November
下次请按照我之前的建议查看您的数据库。
来自他们的文档:
Generating Migrations
You may use the make:migration Artisan command to generate a database
migration. The new migration will be placed in your
database/migrations directory. Each migration filename contains a
timestamp that allows Laravel to determine the order of the
migrations:
https://laravel.com/docs/8.x/migrations#generating-migrations
我尝试在上次 php 和 laravel 8 中创建论坛。我在 laravel 8 购买了 udemy 的课程,我关注他的视频,但我的电脑有错误,视频没有
2021_11_13_000535_create_posts_table
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->integer('is_deleted');
$table->integer('is_approved');
$table->string('image');
$table->unsignedBigInteger('discussion_id');
$table->foreign('discussion_id')->references('id')->on('discussions')->onDelete('cascade');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('slug');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
2021_11_19_165302_create_discussions_table
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDiscussionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('discussions', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('desc');
$table->unsignedBigInteger('forum_id');
$table->foreign('forum_id')->references('id')->on('forums')->onDelete('cascade');
$table->integer('is_deleted')->default(0);
$table->string('image')->nullable();
$table->integer('notify')->default(0);
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('discussions');
}
}
当我尝试迁移时 table 我遇到了这个错误:
Migrated: 2014_10_12_000000_create_users_table (1,399.45ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (2,117.91ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (1,592.76ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (2,125.96ms)
Migrating: 2021_11_12_234608_create_categories_table
Migrated: 2021_11_12_234608_create_categories_table (2,452.77ms)
Migrating: 2021_11_12_235039_create_forums_table
Migrated: 2021_11_12_235039_create_forums_table (2,849.71ms)
Migrating: 2021_11_13_000340_create_tags_table
Migrated: 2021_11_13_000340_create_tags_table (526.62ms)
Migrating: 2021_11_13_000535_create_posts_table
Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1005 Can't create table `stsdb`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `posts` add constraint `posts_discussion_id_foreign` foreign key (`discussion_id`) references `discussions` (`id`) on delete cascade)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:703
699▕ // If an exception occurs when attempting to run a query, we'll format the error
700▕ // message to include the bindings with SQL, which will make this exception a
701▕ // lot more helpful to the developer instead of just the database's errors.
702▕ catch (Exception $e) {
➜ 703▕ throw new QueryException(
704▕ $query, $this->prepareBindings($bindings), $e
705▕ );
706▕ }
707▕ }
+9 vendor frames
10 database/migrations/2021_11_13_000535_create_posts_table.php:28
Illuminate\Support\Facades\Facade::__callStatic()
+21 vendor frames
32 artisan:37
Illuminate\Foundation\Console\Kernel::handle()
有人可以解释为什么会出现这个错误以及如何解决这个问题吗?因为我不明白我在我的电脑上的视频中有错误,而视频中没有。有人可以帮助解决这个问题吗?我已经签入 google 但我没有找到如何解决这个问题,我关注 tuts 构建论坛 laravel 8 和电报通知
问题是您对帖子 table 的迁移是 运行 在您的讨论迁移之前。
发生这种情况是因为 Laravel 运行s 迁移按迁移文件名中的时间戳排序:
2021_11_13_000535_create_posts_table -> 13. November
2021_11_19_165302_create_discussions_table -> 19. November
因此,讨论 table 尚未按照我的评论建议创建!
解决方法很简单,将文件名改成:
2021_11_20_000535_create_posts_table -> 20. November
下次请按照我之前的建议查看您的数据库。
来自他们的文档:
Generating Migrations
You may use the make:migration Artisan command to generate a database migration. The new migration will be placed in your database/migrations directory. Each migration filename contains a timestamp that allows Laravel to determine the order of the migrations:
https://laravel.com/docs/8.x/migrations#generating-migrations