与toJson()相反-将JSON反序列化到模型
我加载带有关系(如书籍、作者、出版商、关键字)的模型,并用JSON将其发送到web界面。用户将在那里编辑它,然后接口将它作为JSON发送回来。问题是如何从JSON(与toJson()调用相反)创建一个模型,然后将其保存到数据库中。如果我能将从db重新加载的原始数据与从web层接收到的数据进行比较,这也会很有帮助。一旦服务器接收到JSON,您就可以对其进行解码:与toJson()相反-将JSON反序列化到模型,json,laravel,eloquent,Json,Laravel,Eloquent,我加载带有关系(如书籍、作者、出版商、关键字)的模型,并用JSON将其发送到web界面。用户将在那里编辑它,然后接口将它作为JSON发送回来。问题是如何从JSON(与toJson()调用相反)创建一个模型,然后将其保存到数据库中。如果我能将从db重新加载的原始数据与从web层接收到的数据进行比较,这也会很有帮助。一旦服务器接收到JSON,您就可以对其进行解码: $decoded = json_decode( Input::get('json') ); 如果您想比较模型,一个选项是从解码的JSO
$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;
}
}
您可以使用
collect(json\u decode($json))
将其转换为集合
谢谢,这很有帮助,但我想这只适用于平面模型。我的模型有关系,据我所知,如果在加载它之后在服务器端进行更改,我可以对它执行->save()。现在,这就是我想对通过电线接收的模型(及其关系)所做的。所以这里的关键问题是,我如何从JSON创建一个模型(带有关系)。您可以通过执行YourModel::find($model_id))->with('relationship')->toJson()来传递带有关系的模型。如果您想在任何时候检查父模型和子模型的更改,只需检查解码的JSON对象的格式,并使用与答案中类似的键/值检查循环其关系即可。在这种情况下,我可能会使用上面的逻辑创建一个检查方法,该方法在给定两个对象或数组和将其重新用于父模型和任何其他相关模型的属性。我需要将其转换为可以保存的带有关系的模型。收藏会有帮助吗?