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

时间:2018-02-08 18:35:41

标签: php mysql laravel laravel-5 foreign-keys

我是Laravel和数据库的新手。我正在为学生评估编写一个Web应用程序。我有一个现有的MySQL数据库,包含我已经需要的一切;但是,我正在使用Laravel的auth用户表并尝试添加引用MySQL数据库中的Teacher表的外键。我一直收到以下错误......

php artisan migrate:fresh
  

在Connection.php第664行中:
  SQLSTATE [HY000]:常规错误:1215无法添加外键约束   (SQL:alter table users添加约束users_teacher_id_foreign   外键(teacher_id)引用p4jteacherteacher_id))

     

在Connection.php第458行: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_10_12_000000_create_users_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');
    });
}

应用/ 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 个答案:

答案 0 :(得分:0)

可能的问题和解决方案是您的数据库引擎不是INNODB或迁移文件的加载顺序不正确。对于第一个解决方案,您需要在$table->engine = 'InnoDB';内添加Schema::create,如果这不能解决问题,我需要您发布用户名和教师迁移< / p>

可能的解决方法:

  

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

因为laravel increment也起作用

  

自动递增UNSIGNED INTEGER(主键)等效列。

只需删除->default(null);并重新运行迁移就可以解决问题。

答案 1 :(得分:0)

您只需要确保外键的数据类型(p4j.teacher.teacher_id)对应于users表中teacher_id列的相同数据类型。

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