使用复合键不正确地形成外键约束
Foreign key constraint is incorrectly formed with Composite Keys
我有一个table"theaters"。其中(theater_name,area_name,station)在table"cubelists"中复合key.And我有列(thtr_name,area,stn) table"theaters".
的(theater_name,area_name,station)
这里的问题是列的组合 - table "theaters" 中的 (theater_name,area_name,station) 是唯一的,因为它是复合键。但是每列单独不是唯一的。
那我如何从 table "cubelists" 中引用这些列呢?
Schema::create('theaters', function (Blueprint $table) {
$table->string('theater_name');
$table->string('area_name');
$table->string('station');
$table->primary(array('theater_name','area_name','station'));
$table->text('address');
$table->bigInteger('phno');
$table->string('contact_person');
});
public function up()
{
//
Schema::create('cubelists', function (Blueprint $table) {
$table->string('mvie_name');
$table->foreign('mvie_name')->references('movie_name')->on('movies');
$table->string('thtr_name');
$table->string('area');
$table->string('stn');
$table->foreign(array('thtr_name','area','stn'))-
>references(array('theater_name','area_name','station'))-
>on('theaters');
$table->primary(array('mvie_name','thtr_name','area','stn'));
$table->string('type');
$table->string('subtype');
$table->date('validity');
$table->string('show');
});
}
如果我给出上面的代码,我会得到一个错误,因为
Migration table created successfully.
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table `boras_cachii`.`#sql-a10_
112` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter tabl
e `agreements` add constraint agreements_area_name_foreign foreign key (`area_nam
e`) references `cubelists` (`area`))
[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table `boras_cachii`.`#sql-a10_
112` (errno: 150 "Foreign key constraint is incorrectly formed")
您必须先创建 table,然后再创建外键。
Schema::create('cubelists', function (Blueprint $table) {
$table->string('mvie_name');
$table->string('area');
$table->string('stn');
$table->primary(array('mvie_name','thtr_name','area','stn'));
$table->string('type');
$table->string('subtype');
$table->date('validity');
$table->string('show');
$table->foreign(array('thtr_name','area','stn'))
->references(array('theater_name','area_name','station'))
->on('theaters');
$table->foreign('mvie_name')
->references('movie_name')
->on('movies');
});
另外 theaters
table 必须首先迁移,因为 cubelists
正在引用它。并确保外键列和引用列的类型或长度相同。
我有一个table"theaters"。其中(theater_name,area_name,station)在table"cubelists"中复合key.And我有列(thtr_name,area,stn) table"theaters".
的(theater_name,area_name,station)这里的问题是列的组合 - table "theaters" 中的 (theater_name,area_name,station) 是唯一的,因为它是复合键。但是每列单独不是唯一的。
那我如何从 table "cubelists" 中引用这些列呢?
Schema::create('theaters', function (Blueprint $table) {
$table->string('theater_name');
$table->string('area_name');
$table->string('station');
$table->primary(array('theater_name','area_name','station'));
$table->text('address');
$table->bigInteger('phno');
$table->string('contact_person');
});
public function up()
{
//
Schema::create('cubelists', function (Blueprint $table) {
$table->string('mvie_name');
$table->foreign('mvie_name')->references('movie_name')->on('movies');
$table->string('thtr_name');
$table->string('area');
$table->string('stn');
$table->foreign(array('thtr_name','area','stn'))-
>references(array('theater_name','area_name','station'))-
>on('theaters');
$table->primary(array('mvie_name','thtr_name','area','stn'));
$table->string('type');
$table->string('subtype');
$table->date('validity');
$table->string('show');
});
}
如果我给出上面的代码,我会得到一个错误,因为
Migration table created successfully.
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table `boras_cachii`.`#sql-a10_
112` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter tabl
e `agreements` add constraint agreements_area_name_foreign foreign key (`area_nam
e`) references `cubelists` (`area`))
[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table `boras_cachii`.`#sql-a10_
112` (errno: 150 "Foreign key constraint is incorrectly formed")
您必须先创建 table,然后再创建外键。
Schema::create('cubelists', function (Blueprint $table) {
$table->string('mvie_name');
$table->string('area');
$table->string('stn');
$table->primary(array('mvie_name','thtr_name','area','stn'));
$table->string('type');
$table->string('subtype');
$table->date('validity');
$table->string('show');
$table->foreign(array('thtr_name','area','stn'))
->references(array('theater_name','area_name','station'))
->on('theaters');
$table->foreign('mvie_name')
->references('movie_name')
->on('movies');
});
另外 theaters
table 必须首先迁移,因为 cubelists
正在引用它。并确保外键列和引用列的类型或长度相同。