【发布时间】:2014-05-07 18:06:29
【问题描述】:
伙计们,我在 eloquent 和数据库中发生了一些奇怪的事情,我似乎无法找到它。 我在继承层次结构中有 3 个模型 User > Gp1user > Worker,它们之间存在一对一的关系。
这是来自我的控制器的代码
$user = User::find(1);
$gp1user = new Gp1user;
$gp1user->user()->associate($user);
$gp1user->save();
$worker = new Worker;
$worker->gp1user()->associate($gp1user);
$worker->save();
似乎即使$gp1user 已保存,我也无法使用该引用与$worker 建立关联。我得到了错误
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`careers`.`workers`, CONSTRAINT `workers_gp1user_id_foreign` FOREIGN KEY (`gp1user_id`) REFERENCES `gp1users` (`user_id`)) (SQL: insert into `workers` (`gp1user_id`) values (0))
但如果我检查数据库,$gp1user 实例确实存在。所以我只剩下这个选项了。
$user = User::find(1);
$gp1user = new Gp1user;
$gp1user->user()->associate($user);
$gp1user->save();
$worker = new Worker;
$worker->gp1user()->associate(Gp1user::find(9));
$worker->save();
我必须在数据库中找到特定实例并使用id 创建一个新实例。哪个有效,但不是因为我必须先检查数据库中的 id。
为什么 eloquent 不让我使用 $gp1user 参考?
我怀疑它与外键有关,但我找不到任何问题。
这就是我的迁移(在不同文件中)的样子
Schema::create('users', function($table)
{
//
$table->increments('id');
$table->string('first_name', 128);
$table->string('second_name', 128);
$table->string('email');
$table->string('password', 60);
$table->timestamps();
});
Schema::create('gp1users', function($table)
{
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->unique('user_id')->primary();
});
Schema::create('workers', function($table)
{
$table->integer('gp1user_id')->unsigned();
$table->foreign('gp1user_id')->references('user_id')->on('gp1users');
$table->unique('gp1user_id')->primary();
});
我的模型
class User extends Eloquent {
public function gp1user()
{
return $this->hasOne('Gp1user');
}
}
class Gp1user extends Eloquent {
protected $primaryKey = 'user_id';
public $timestamps = false;
public function user()
{
return $this->belongsTo('User');
}
public function worker()
{
return $this->hasOne('Worker');
}
}
class Worker extends Eloquent {
protected $primaryKey = 'gp1user_id';
public $timestamps = false;
public function gp1user()
{
return $this->belongsTo('Gp1user');
}
}
提前致谢。
【问题讨论】:
标签: laravel constraints eloquent belongs-to relationships