我是Laravel的新手,正在开发一个简单的API来将数据insert
到MySQL table
中。所以基本上我使用的表单将接受来自用户的姓名、电子邮件、电话和密码,并将其insert
到MySQL中。
Laravel中有没有什么方法可以从JSON数据中检索键和值,并将相同的数据insert
到MySQL中。以下是JSON数据和表结构:
{
"name" : "xyz",
"email" : "xyz@gmail.com",
"password" : "12345",
"phone_number" : "1234567890",
}
正如我们所看到的,JSON键和表column
名称完全相同,那么我是否可以通过从JSON获取数据来一次在所有字段中插入数据?
我不想通过给数据提供一个单独的密钥来insert
数据。
提前感谢
发布于 2020-03-07 19:17:16
首先,您需要将JSON解码为一个数组,如下所示。值'true‘将确保返回的数据是一个数组而不是一个对象。(请参阅:https://www.php.net/json_decode)
$data = json_decode($data, true);
然后,您可以创建一个新行。假设您正在尝试创建一个新用户,您可以使用Mass Assignment
$user = User::create($data);
如果你使用的是Mass Assignment,,请确保你已经更新了模型的'fillable‘属性。
protected $fillable = ['name', 'email', 'password', 'phone_number'];
发布于 2020-03-07 18:47:19
json_decode是一个PHP框架,因此Laravel PHP函数可以帮助我们:
$json = json_decode($yourjson, true);
$columns = [];
$values = [];
$parameters = [];
foreach ($json as $key => $value) {
$columns[]=$key;
$values[$key]=$value;
$parameters[]=":".$key;
}
$sql = "insert into yourtable(".implode(",", $columns).") values(".implode(",", $parameters).")";
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute($values);
上面的例子是使用PDO。
您还可以使用Laravel的查询构建器:https://laravel.com/docs/5.7/queries
编辑
由于有一些关于$dbh
的不清楚之处,我将分享文档中的一个PDO实例化示例。
<?php
/* Connect to a MySQL database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
https://stackoverflow.com/questions/60576423
复制相似问题