2012-11-27 38 views
0

我遇到了一个问题,试图使用laravel将user_id链接到另一个表。我正在使用迁移,似乎无法找到我做错了什么。我不断收到错误..如何链接laravel中的两个表?

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child 
row: a foreign key constraint fails (`ship`.`units`, CONSTRAINT 
`units_user_id_foreign` FOREIGN KEY(`user_id`) REFERENCES `users` (`id`)) 

SQL: INSERT INTO `units` (`unit`, `updated_at`, `created_at`) VALUES (?, ?, ?) 

Bindings: array (
    0 => 'i987', 
    1 => '2012-11-27 19:19:42', 
    2 => '2012-11-27 19:19:42', 
) 

这里是我的移民..

Schema::create('users', function($table) { 
    $table->increments('id'); 
    $table->string('email'); 
    $table->string('unit'); 
    $table->string('password'); 
    $table->timestamps(); 
}); 
Schema::create('units', function($table) { 
    $table->engine = 'InnoDB'; 
    $table->increments('id'); 
    $table->string('unit'); 
    $table->integer('user_id')->unsigned(); 
    $table->foreign('user_id')->references('id')->on('users'); 
    $table->timestamps(); 
}); 

我的用户模型......用户有一个单元

return $this->has_one('Unit'); 

我的单元模型.. 。属于用户

return $this->belongs_to('User'); 

出于某种原因,ev erytime我注册一个新用户,它默认单位表中的user_id为0.当我创建一个新用户时,我希望单位表具有正确的user_id,这样我可以将该用户和单位关联起来。你能看到我在这里做错了什么吗?

我的用户控制器...

User::create(array(
    'email' => Input::get('email'), 
    'password' => Hash::make($password) 
)); 

    Unit::create(array(
    'unit' => Input::get('unit'); 
)); 
+0

取出外国查询$表 - >外国( 'USER_ID') - >的引用( 'ID') - >上( '用户');并..错误消失,但单位表中的user_id仍然默认为0 ... – coryj

回答

3

在迁移架构单位设置的外键

//Unit Schema Migration 
$table->integer('user_id'); 

//User Controller 
$unit = new Unit(array('unit' => Input::get('unit'))); 
$user = User::create(array(
         'email' => Input::get('email'), 
         'password'=>Hash::make($password) 
        )); 

$unit = $user->unit()->insert($unit); 
+0

真棒,感谢兄弟! – coryj