0

laravelを使用してuser_idを別のテーブルにリンクしようとすると問題が発生します。移行を使用していますが、間違っていることを見つけることができないようです。エラーが発生し続けます。

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();  
});

私のユーザーモデル...ユーザーは1つのユニットを持っています

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

私のユニットモデルは...ユーザーのものです

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

何らかの理由で、新しいユーザーを登録するたびに、ユニットテーブルのuser_idがデフォルトで0になります。新しいユーザーを作成するときは、ユニットテーブルに正しいuser_idを設定して、そのユーザーとユニットを関連付けることができるようにします。ここで私が間違っていることがわかりますか?

私のユーザーコントローラー...

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

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

1 に答える 1

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);
于 2012-11-27T21:22:18.813 に答える