当前位置: 首页 > 知识库问答 >
问题:

外部数据库中的Laravel外键引用表?

扶冠宇
2023-03-14

我对Laravel和数据库都是新手。我正在写一个学生评估的网络应用程序。我有一个现有的MySQL数据库,它已经包含了我所需要的一切;但是,我正在使用Laravel的auth user表,并尝试添加一个外键,该外键引用MySQL数据库中的教师表。我一直得到以下错误。。。

php artisan migrate:fresh

在Connection.php第664行:
SQLSTATE[HY000]:一般错误:1215不能添加外键约束(SQL:改变表用户添加约束users_teacher_id_foreign外键(teacher_id)引用p4j.老师teacher_id

在Connection.php458行:SQLSTATE[HY000]:一般错误:1215不能添加外键约束

我的代码如下。。。

配置/database.php

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DP_PORT', '3306'),
    'database' => env('DB_DATABASE', 'p4j'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DP_PASSWORD', '**mypassword**'),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
],

数据库/迁移/2014\u 10\u 12\u 000000\u创建用户\u table.php

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->integer('teacher_id')->unsigned();
        $table->rememberToken();
        $table->timestamps();
    });

    Schema::table('users', function (Blueprint $table) {
          $table->foreign('teacher_id')->references('teacher_id')->on('p4j.teacher');
    });
}

app/User.php

protected $fillable = [
    'name', 'email', 'password', 'teacher_id'
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

共有2个答案

欧阳德运
2023-03-14

几个可能的问题和解决方案是您的数据库引擎不是INNODB或者迁移文件的加载顺序不正确。对于第一个解决方案,您需要添加$table-

可能的解决方案:

PRIMARYKEY约束和UniQUE约束都用于强制执行实体完整性(将行定义为特定表的唯一实体),但主键不允许空值。指定唯一标识表中行的列。标识的列必须定义为NOTNULL。

而且由于拉氏增量函数也

自动递增的无符号整数(主键)等效列。

只需删除-

公良文彬
2023-03-14

您只需要确保外键的数据类型(p4j.teacher.teacher\u id)与用户表中teacher\u id列的数据类型相同。

我们需要查看p4j.teacher表的结构。

 类似资料:
  • 我有两个表,事务表和付款表,它们在过去的迁移中已经存在。当我试图在它们之间建立一个透视表时,只会得到事务外键的一个错误。“payments”表上的另一个外键创建得很好。这绝对让我感到困惑,我之前关于这个错误的讨论都没有解决这个问题。 错误(参考,MAccounting是数据库的名称): *尽管错误似乎说,payment_transaction表创建成功,以及支付表的外键;唯一中断的是交易的外键。

  • 问题内容: 在PostgreSQL中,我有一个数据库,我打算进行以下表声明: 一切正常,除了在创建最后一个表(更正)时出现以下错误: 错误:没有唯一的约束匹配给定键的引用表“提交” 我对更正表的打算是对每个提交都有唯一的更正,但是一个提交可以(也可以不)具有更正。 我该如何解决这个错误?是设计问题还是表声明错误? 问题答案: 外键约束不关心所引用的列是否在引用另一列本身。但是引用的列 必须 是唯一

  • 我正在尝试在table of数据库与table of数据库之间创建外键: 用户id int(10)未签名的编号 Id int(10)无符号编号 我创建了查询 "外键约束格式错误"有人能帮助我如何实现这一点吗?

  • 我有一个问题与我的Laravel迁移:( 当我运行php artisan migrate时,它会在外键上停止。 首次迁移 还有第二个 运行命令后,我出现以下错误: [Illumb\Database\QueryException] SQLSTATE[HY000]:一般错误:1005无法创建表gsb_larave.35; sql-176_b9(错误号:150“外键约束格式不正确”)(sql:alter

  • 我想知道。 是否可以在外部存储卡中创建数据库? 更新:-

  • 我有4个实体列在下面的职位。客户端和产品已在数据库中。问题在于订单和订单产品。我创建Orders对象,然后添加客户机(已经在数据库中)和OrdersProducts的ArrayList,但出现了错误: 当我不添加客户机时,数据库中只有OrderProducts的ArrayList,但OrderProducts没有外键。怎么了?我使用Mysql服务器和hibernate。