2016-11-29 65 views
2

我加載關係模型(如書籍,作者,出版商,關鍵字),並以JSON形式將其發送到Web界面。用戶將在那裏編輯它,然後界面將以JSON的形式發回。問題是如何從JSON(與json()調用相反)創建模型,然後將其保存到數據庫。如果我可以將原始數據(再次從db重新加載)與從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

在這種情況下,我可能會創建一個上面的邏輯的檢查方法,返回一個給定兩個對象或數組的變化值的數組,並將它重用於父模型和任何其他相關模型的屬性。 –

-1

您可以通過使用collect(json_decode($json))其轉換爲collection

collection Docs

+0

我需要將它轉換爲模型,並帶有關係,我可以保存。收藏會有幫助嗎? – Andris

+0

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