2017-09-05 21 views
0

Laravel 5.4を使用しています。配列内のこのフィールドを更新できないのはなぜですか?オーバーロードされた要素の間接的な変更は配列には影響しません

私のコントローラに私は保護されたフィールド$gameを持っています。

私は、プロパティの一部は、regionsフィールドとしてJSON列、ある、コレクションの一部である

$this->game = GameProgress::where('id', '=', $id)->lockForUpdate()->first(); 

そのデータをフェッチ:私はその後、/アップデートにアクセス

#attributes: array:22 [ 
    "id" => 13 
    "name" => "DEBUGfdsf" 
    "creator_id" => 1 
    "game_id" => 1 
    "difficulty_id" => 2 
    "players_total" => 2 
    "round_number" => 1 
    "stage_name" => "setup" 
    "active_player_id" => 2 
    "active_player_turn_id" => 1 
    "winner_id" => 0 
    "game_points" => 0 
    "locked" => 0 
    "players" => "[{"id": 2, "name": "The Damage Hot", "cards": [{"id": 3, "type": "Armored", "image": "chad.png", "strength": 4, "region_id": 10, "type_image": "armored.png", "region_owned_adder": 2}, {"id": 2, "type": "Infantry", "image": "china.png", "strength": 2, "region_id": 13, "type_image": "infantry.png", "region_owned_adder": 1}, {"id": 2, "type": "Infantry", "image": "kazakhstan.png", "strength":........ 

このようなデータ:

$this->game['regions'][$region_id - 1]['strength'] = $region_adder + $this->game['regions'][$region_id - 1]['strength']; 

しかし、私はこれを得る:

Indirect modification of overloaded element of App\Models\GameProgress has no effect 

私はこれを回避できないようです。配列内のフィールドの内容を操作するにはどうすればよいですか?

+0

'$ this-> game'は' GameProgress'インスタンスです。 APIとは何ですか?それはデータを操作する方法を提供していますか? – Phil

+0

$ this-> gameは、コントローラがグローバルに利用できる保護された変数です。これにはGameProgressコレクションのインスタンスが含まれています。 – TheRealPapa

答えて

0

私は配列としてコレクションにアクセスしていました。レコードコレクションに->toArray()を追加することで修正されました。

$this->game = GameProgress::where('id', '=', session()->get('game.id'))->lockForUpdate()->first()->toArray(); 
関連する問題