所以我有一个非常简单的json对象,表示DB行条目,我需要这样保存它。例如json中有
{
"id": 1,
"name": "A green door",
"price": 12.50,
"tags": ["home", "green"]
}
和在我的数据库中,我有一个列id,名称,价格和标签表。除了
,最简单的方法是什么?$mysqlObject->id = $jsonObject->id;
$mysqlObject->name = $jsonObject->name;
$mysqlObject->price = $jsonObject->price;
$mysqlObject->tags = $jsonObject->tags;
$mysqlObject->save();
上面的代码可以工作,但是在我的特殊示例中,我有200-300列,并且输入所有列将花费很长时间。
将所有列名放在一个列表中并遍历它
$column_names = Array(...);
foreach($column_names as $col_name) {
$mysqlObject->$col_name = $jsonObject->$col_name;
}
$mysqlObject->save();
应该可以了。确保在服务器端有一个硬编码列表,而不是依赖于JSON,否则脚本将会受到注入攻击。
我能想到的最简单的方法是:
$mysqlObject = MysqlModel::create(json_decode($jsonObject));
当然你需要为此创建一个Eloquent模型。你可以从雄辩者的Mutator
中获益。
您应该能够使用fill
$mysqlObject->fill((array) $jsonObject);
如果你可以解码json字符串作为一个数组,这将是可取的。如果使用json_decode
,则传递true
作为第二个参数。这样,您就不需要在将json对象传递给fill
函数之前将其强制转换为数组。