Как извлечь данные из JSON и вставить их в соответствующий столбец в MySQL в Laravel? - PullRequest
1 голос
/ 07 марта 2020

Я новичок в Laravel и работаю над простым API для insert данных в MySQL table. Таким образом, в основном я использую форму, которая будет принимать имя, адрес электронной почты, телефон и пароль от пользователя и insert его в MySQL.

. Есть ли в Laravel какой-либо метод для получения ключа и значение из данных JSON и insert тех же данных в MySQL. Ниже приведена структура данных и таблиц JSON:

{
"name" : "xyz",
"email" : "xyz@gmail.com",
"password" : "12345",
"phone_number" : "1234567890",
}

table structure

Как мы видим, ключ JSON и таблица column имя точно такое же, поэтому я могу вставить данные сразу во все поля, извлекая данные из JSON?

Я не хочу insert данных, давая им индивидуальный ключ.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 07 марта 2020

Сначала вам нужно будет декодировать 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'];
0 голосов
/ 07 марта 2020

Laravel является фреймворком PHP, поэтому нам помогает функция json_decode 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

EDIT

Поскольку были некоторые неясности относительно $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();
}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...