我正在尝试使用artisan创建外键,但出现了此错误。
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `comments` add constraint `comments_comment_lot_id_foreign` foreign key (`comment_lot_id`) references `lots` (`lot_id`
) on delete cascade)
这是我的迁移:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCommentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->increments('id');
$table->text('comment');
$table->integer('comment_lot_id')->unsigned();
$table->timestamps();
});
Schema::table('comments', function ($table) {
$table->foreign('comment_lot_id')->references('lot_id')->on('lots')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropForeign(['comment_lot_id']);
Schema::dropIfExists('comments');
}
}
在批次表中,我使用lot_id
作为id
it模型批次。我补充说:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Lot extends Model {
protected $primaryKey = 'lot_id';
}
知道如何解决这个错误吗?
引用这个答案:
要查找特定的错误,请运行以下命令:
显示引擎INNODB状态
并查看
最新外键错误
部分。
这可能是类型的问题。
comment_lot_id
必须与lot_id
完全相同。可能一个有符号,另一个无符号。
看起来这不是你的问题,但我在Laravel 5.8中遇到了同样的错误,并发现了一个有趣的问题:Laravel现在将“id”列默认为“bigIncrements”,而不仅仅是“increments”。因此,与之前使用“integer”来引用它不同,您必须使用“biginger”来引用它。
如果父表如下所示:
$table->bigIncrements('id');
然后,儿童迁移需要如下所示:
$table->bigInteger('parent_id')->unsigned()->index();
$table->foreign('parent_id')->references('id')->on('parent');
希望这能帮助任何在5.8及以后遇到这个问题的人。
将以下规则应用到您的迁移文件:
[1]
父数据透视表必须基于支持外键引用的引擎(例如,用于mysql的InnoDB)。
Do$table-
我观察到laravel总是默认为MyISAM,因此这一行是必须的。
[2]
父项中引用的列必须是主键或唯一键。
父表中的这些声明很好:
$table-
$table-
[3]
透视表列的类型必须与其引用的父表列的类型相同。
例如,应该引用增量(“id”)的数据透视表列必须是unsignedInteger类型。
如果父表是char(20)类型,那么用于引用它的透视表列也必须是char(20)类型。
完成以上三个步骤后,根据需要定义外键关系。
我正在尝试使用Laravel 5.8为“users”表创建外键。 Laravel 5.8自动生成的迁移表如下, 然后从我的“存储库”表中,我引用了“用户”表,如下所示, 但我在这段代码上遇到了“一般错误:1215无法添加外键约束”错误。有许多与此问题相关的解决方案。 一般错误:1215无法在laravel中添加外键约束 迁移:无法在laravel中添加外键约束 MySQL数据库发生Laravel迁
试图分配外键,但当你运行迁移,我得到这个这个错误,我不明白是什么问题。 SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table
问题内容: 我正在尝试为体育馆管理系统创建数据库,但无法弄清楚为什么会出现此错误。我试图在这里搜索答案,但找不到。 这是父表。 你们能帮我解决这个问题吗?谢谢。 问题答案: 为了将字段定义为,引用的父字段必须在其上定义了索引。 根据有关约束的文档: 参考parent_tbl_name(index_col_name,…) 定义上,和分别。并确保子列定义必须与其父列定义匹配。 更改表定义如下: 更改表
问题内容: 我已经阅读了 Silberschatz的 数据库系统概念 ,第6版。我将在MySQL的OS X上实现第2章所示的大学数据库系统。但是我在创建表时遇到了麻烦。桌子看起来像 __ 创建表将导致以下错误。 在google搜索外键约束之后,我刚刚了解到“外键约束”一词表示来自表中外键列的数据必须存在于表的主键列中。但是我应该在插入数据时遇到此错误。 如果没有,为什么作者让我执行该SQL语句?
关于这个错误,我到处都找过,也看过很多例子,但我还是想不出我的脚本有什么问题。如果这是一个常见的问题,我很抱歉,但到目前为止,搜索它对我没有帮助。剧本如下: 非常感谢你的帮助。