2017-12-21 14 views
0

モデルを保存しようとしていますが、これはリンクテーブルです。 表:外部キー付きラーベル保存モデル

Schema::create('game_has_users', function (Blueprint $table) { 
     $table->integer('game_id')->unsigned(); 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('game_id')->references('id')->on('games')->onUpdate('cascade')->onDelete('cascade'); 
     $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 

Game_Has_Usersモデル:

 class Game_Has_Users extends Model 
{ 
    protected $table = 'game_has_users'; 

    public function user() 
    { 
     return $this->hasOne('App\User', 'user_id'); 
    } 

    public function game() 
    { 
     return $this->hasOne('App\Game', 'game_id'); 
    } 
} 

私はゲームを保存すると、その後、Game_Has_Usersモデルは、ユーザIDとゲームIDを使用して作成する必要があります。

try { 
     $game = Game::create([]); 
     $user = User::where('name', $request->input('name'))->first(); 

//  $game_users = Game_Has_Users::create([]); 
//  $game_users->user = $user->id; 
//  $game_users->game = $game->id; 
//  $game_users->save(); 

     $test = Game_Has_Users::create([ 
      'user_id' => $user->id, 
      'game_id' => $game->id 
     ]); 
     return response()->json(['t' => $test, 'status' => 'ok']); 
    } 
    catch(\Exception $e) { 
     return response()->json(['status' => 'failed', 'message' => $e]); 
    } 

ただし、私は常に次の応答を受け取ります:status:failed、message:[] 例外がないので、私は何が間違っていたのか分かりません。 私は、ゲームIDとユーザーIDのデフォルト値、リンクモデルを保存するためのさまざまな方法など、さまざまなアプローチを試みました。 $ game-> idと$ user-> idには、応答を送信するときに値があります。

+0

'Game_Has_Users'はモデルであってはなりません。ピボットテーブルです。あなたはゲームとユーザーの多面的な関係を持っているので、ゲームとユーザーのモデルでそれを定義します。 – apokryfos

答えて

1

$fillableプロパティを設定する必要があります。

protected $fillable = ['user_id', 'game_id']; 
あなた Game_Has_Usersモデルで

+0

その仕事をした、ありがとう! – jordibenck

2

雄弁は、すべてのテーブルは、単一の主キーを持っているので、あなたがこのテーブルにid列を追加することを確認する予定雄弁

に準拠しています。この列がなければ、さまざまな雄弁な方法を利用するときに問題が発生します。移行インサイド

が、これは自動増分主キーを追加します。

$table->increments('id'); 

は、私が正しいんだ場合、Games_Has_Usersは多くの関係に多くのように見える、関係

次を活用します。

したがって、このテーブルのモデルを用意する必要はありません。適切なbelongsToMany関係を使用して、お互いにモデルを添付することができます。

$game = Game::find(1); 
$user = User::find(1); 
// Assuming the User model has a games() belongsToMany relationship; 
$user->games()->attach($game); 
// or the inverse 
$games->users()->attach($user); 

次にあなたが$user->gamesを持つユーザーに添付ゲームのコレクションにアクセスすることができます。

続きを読むhttps://laravel.com/docs/5.5/eloquent-relationships#many-to-many

関連する問題