Gil*_*lko 11 php migration laravel laravel-4
当我做php artisan migrate时,我收到此错误.我的迁移文件有什么问题吗?或者我的模型可能编码错误吗?但即使模型中存在问题,迁移也应该有效吗?
[Exception]
SQLSTATE[HY000]: General error: 1005 Can't create table 'festival_aid.#sql-
16643_2033' (errno: 150) (SQL: alter table `gigs` add constraint gigs_band_
id_foreign foreign key (`band_id`) references `bands` (`band_id`) on delete
cascade) (Bindings: array (
))
[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'festival_aid.#sql-
16643_2033' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
演出迁移
public function up()
{
Schema::create('gigs', function($table)
{
$table->increments('gig_id');
$table->dateTime('gig_startdate');
$table->integer('band_id')->unsigned();
$table->integer('stage_id')->unsigned();
$table->foreign('band_id')
->references('band_id')->on('bands')
->onDelete('cascade');
$table->foreign('stage_id')
->references('stage_id')->on('stages')
->onDelete('cascade');
});
public function down()
{
Schema::table('gigs', function($table)
{
Schema::drop('gigs');
$table->dropForeign('gigs_band_id_foreign');
$table->dropForeign('gigs_stage_id_foreign');
});
}
Run Code Online (Sandbox Code Playgroud)
乐队迁移
public function up()
{
Schema::create('bands', function($table)
{
$table->increments('band_id');
$table->string('band_name');
$table->text('band_members');
$table->string('band_genre');
$table->dateTime('band_startdate');
});
}
public function down()
{
Schema::table('bands', function(Blueprint $table)
{
Schema::drop('bands');
});
}
Run Code Online (Sandbox Code Playgroud)
模型乐队
<?php
class Band extends Eloquent {
protected $primaryKey = 'band_id';
public function gig()
{
return $this->hasOne('Gig', 'band_id', 'band_id');
}
}
Run Code Online (Sandbox Code Playgroud)
模特演出
<?php
class Gig extends Eloquent {
protected $primaryKey = 'gig_id';
public function gig()
{
return $this->belongsTo('Band', 'band_id', 'band_id');
}
public function stage()
{
return $this->belongsTo('Stage', 'stage_id', 'stage_id');
}
}
Run Code Online (Sandbox Code Playgroud)
Ant*_*iro 20
您必须首先创建表,然后创建外键:
Schema::create('gigs', function($table)
{
$table->increments('gig_id');
$table->dateTime('gig_startdate');
$table->integer('band_id')->unsigned();
$table->integer('stage_id')->unsigned();
});
Schema::table('gigs', function($table)
{
$table->foreign('band_id')
->references('band_id')->on('bands')
->onDelete('cascade');
$table->foreign('stage_id')
->references('stage_id')->on('stages')
->onDelete('cascade');
});
Run Code Online (Sandbox Code Playgroud)
并且您的bands表应首先迁移,因为它gigs正在引用它.
And*_*rew 16
虽然这不适用于OP,但其他人可能会遇到此问题:
从Laravel Schema文档的底部:
注意:创建引用递增整数的外键时,请记住始终使外键列无符号.
您可以$table->integer('user_id')->unsigned();在迁移文件中创建表时执行此操作.
花了几分钟时间才意识到发生了什么.
| 归档时间: |
|
| 查看次数: |
32842 次 |
| 最近记录: |