2016-11-29 62 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)) –