我是Laravel和数据库的新手。我正在为学生评估编写一个Web应用程序。我有一个现有的MySQL数据库,包含我已经需要的一切;但是,我正在使用Laravel的auth用户表并尝试添加引用MySQL数据库中的Teacher表的外键。我一直收到以下错误......
php artisan migrate:fresh
在Connection.php第664行中:
SQLSTATE [HY000]:常规错误:1215无法添加外键约束 (SQL:alter tableusers
添加约束users_teacher_id_foreign
外键(teacher_id
)引用p4j
。teacher
(teacher_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',
];
答案 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表的结构。