简单的方法来匹配数据库列名json键


Easy way to match DB column names to json keys?

所以我有一个非常简单的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函数之前将其强制转换为数组。