这是我保存游戏的地方:
public function storeGame() {
$player = new Player(['player_name' => Request::get('host_name')]);
$player->save();
$game = new Game(Request::all());
$game->host_id = $player->id;
$game->save();
$player->game_id = $game->id;
$player->save();
return redirect('lobby');
}
这是雄辩的关系:
class Game extends Model {
protected $table = 'games';
protected $fillable = ['game_name','password','round_time','num_rounds','num_players','roles_bool'];
protected $hidden = ['password'];
public function host() {
return $this->hasOne('App\Player', 'id');
}
public function players() {
return $this->hasMany('App\Player', 'id');
}
}
问题是当我保存游戏时,主机ID的值正在改变。这些是保存后var_dump()的结果。
$game->host_id:
int 2
$game->host->id:
string '1' (length=1)
为什么会发生这种情况?如何阻止它?
提前感谢您的帮助。
答案 0 :(得分:1)
Host
关系有关。我在游戏模型的可填写字段中看不到host_id
。
您的host_id
模型上应该有一个Games
可填写字段,然后该关系将如下所示:
public function host() {
return $this->hasOne('App\Player', 'host_id');
}
答案 1 :(得分:0)
您之前可能已加载相关的主机对象,并且在更改主机ID后尚未“刷新”。实际上你不应该直接改变关系id,有专门的方法来做到这一点:http://laravel.com/docs/4.2/eloquent#inserting-related-models