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

时间:2015-02-11 23:19:35

标签: laravel eloquent laravel-5

这是我保存游戏的地方:

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)

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

提前感谢您的帮助。

2 个答案:

答案 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