2016-11-29 4 views
2

リレーションを持つモデル(ブック、著者、パブリッシャー、キーワードなど)を読み込み、JSONのWebインターフェイスに送信します。ユーザーはそこでそれを編集し、インターフェースはそれをJSONとして戻します。問題は、JSON(toJson()呼び出しの逆)からモデルを作成し、それをデータベースに保存する方法です。元のデータ(データベースから再読み込みされたデータ)を、Webレイヤーから受け取ったデータと比較することもできれば便利です。それは、サーバが受信しています一度toJsonの逆() - モデルへのJSONの逆化

答えて

1

あなたはJSONをデコードすることができます

$decoded = json_decode(Input::get('json')); 

あなたがチェック二重に確認して一つの選択肢は、あなたのデコードJSON(からモデルのIDをつかんされたモデルを比較したい場合ユーザーがあなたの上でデータを見てみるためにアクセスできるようにする)、デコードされたデータのキー/値をループし、それらを互いに照合する。

$model = YourModel::find($decoded->id); // dont forget to ensure they have access to this model 

// Set up an empty array to store anything that's changed 
$changes = array(); 

// Loop over your decoded values 
foreach($decoded as $key => $value) { 

    // If the value in your model doesn't match the decoded value, add to the changes array 
    if($model->{$key} != $value) { 
     $changes[$key] = $value; 
    } 
} 
+0

おかげで、これはだけ、私は推測するフラットなモデルと、役立ちます。私のモデルはリレーションを持っており、読み込んだ後にサーバー側を変更するとわかっているので、その上で - > save()を実行できます。これが、私がワイヤで受け取ったモデル(とそれの関係)を使ってやりたいことです。ここで重要なのは、JSONから(リレーションを使用して)モデルを作成する方法です。 – Andris

+0

YourModel :: find($ model_id) - > with( 'relationship') - > toJson()を実行すると、リレーションシップを使用してモデルをパススルーすることができます。親と子のモデルの変更をいつでもチェックしたいのであれば、デコードされたJSONオブジェクトの形式をチェックして、回答と同様のキー/値チェックでその関係をループするだけです。 –

+0

その場合、おそらく2つのオブジェクトまたは配列を与えられた変更された値の配列を返し、親モデルと他の関連するモデルのプロパティに対して再利用する上記のロジックを持つチェックメソッドを作成します。 –

-1

あなたはcollect(json_decode($json))を使用してcollectionに変換することができます。

collection Docs

+0

私はそれを私が保存することができるリレーションを持つモデルに変換する必要があります。コレクションはそれを助けますか? – Andris

+0

'' 'collect(json_decode($ json)) –

関連する問題