为什么 save() 正在更改模型值?

Why is save() is changing the model value?

这是我保存游戏的地方:

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

这是 eloquent 关系:

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)

为什么会发生这种情况,我该如何阻止它?

提前感谢您的帮助。

您之前可能加载了相关的主机对象,但在您更改主机 ID 后它还没有 "refreshed"。实际上你不应该直接更改关系 ID,有专门的方法可以做到这一点:http://laravel.com/docs/4.2/eloquent#inserting-related-models

Duncan - 我认为这与您的 Host 关系有关。我在游戏模型的可填写字段中没有看到 host_id

您的 Games 模型上应该有一个 host_id 可填写字段,然后关系将如下所示:

public function host() {
        return $this->hasOne('App\Player', 'host_id');
    }