为什么 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');
}
这是我保存游戏的地方:
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');
}