Php 将DB列名与json键匹配的简单方法?

Php 将DB列名与json键匹配的简单方法?,php,mysql,json,laravel,Php,Mysql,Json,Laravel,因此,我有一个非常简单的json对象,它表示一个DB行条目,我需要将其保存为这样。例如,json { "id": 1, "name": "A green door", "price": 12.50, "tags": ["home", "green"] } 在我的数据库中,我有一个表,其中包含id、name、price和tags列。除此之外,最简单的方法是什么 $mysqlObject->id = $jsonObject->id; $mysqlObje

因此,我有一个非常简单的json对象,它表示一个DB行条目,我需要将其保存为这样。例如,json

{
    "id": 1,
    "name": "A green door",
    "price": 12.50,
    "tags": ["home", "green"]
}
在我的数据库中,我有一个表,其中包含id、name、price和tags列。除此之外,最简单的方法是什么

$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));
当然,您需要为此创建一个雄辩的模型。你可以从雄辩的变异者那里得到好处。

你应该能够使用fill


如果可以将json字符串解码为一个数组,那就更好了。如果您使用的是json_decode,请将true作为第二个参数传递。这样,在将json对象传递到fill函数之前,您不需要将其强制转换为数组。

在循环中,可能.tags应该存储在单独的表中。考虑到您有如此大量的列,似乎a可能是比RDBMS更好的存储选择。我认为问题是OP不想键入所有名称,因为它们有200-300个。当然,这可以通过多种方式解决,不一定是编程方式。
$mysqlObject->fill((array) $jsonObject);