Обновите несколько таблиц mysql с одним json в Stack Overflow

У меня есть AngularJS и получил некоторые проблемы, связанные с уровнем данных.

На фронте у меня есть контакты.

контакт JSON объект:

  {
"id": 1,
"groupId": 1,
"firstName": "John",
"lastName": "Doe",
"email": "jd@gmail.com",
"company": "Google",
"info": "lorem ipsum dolor amet",
"numbers": [
{
"typeId": 1,
"number": "123456"},
{
"typeId": 2,
"number": "1234567"},
{
"typeId": 3,
"number": "8765432"},
{
"typeId": 4,
"number": "0864235"}
]
}

Я получаю этот объект через URL с одним http-запросом.

Когда я сохраню его, я верну именно этот объект бэкэнду.

Но как я могу, например, обновить число из таблицы номеров или компанию из таблицы компаний с помощью php?

Мой коллега сказал мне, что когда я обновляю номер в контактном объекте, я должен вызвать URL с /numbers/id ,
Но я просто хочу вернуть «контактный объект» в /contacts
и пусть бизнес-уровень / уровень данных выполняет логику и разделяет объект для обновления разных таблиц.

В бэкэнде он использует php и обезжиренные рамки.

Кто-нибудь может объяснить, как это сделать?

-РЕДАКТИРОВАТЬ-

И я подумал, что полная логика сохранения данных находится в бэкэнде.
С DTO (объект передачи данных) и DAO (объект доступа к данным) и т. Д.

0

Решение

Если вы хотите принять граф объектов, то вам нужно проанализировать его, а затем сделать соответствующие вызовы в базу данных.

Например, предполагая, что у вас есть таблица «numbers» со столбцами «typeId» и «number», вы, вероятно, захотите логику в своем классе «contact», который выполняет что-то вроде …

// convert the JSON to PHP
$request = json_decode($contact);
if(isset($request->numbers)) {
$number = new \DB\SQL\Mapper($this->db, "number");
// loop over your number objects
foreach($request->numbers as $data) {
// create a new number entry for each one
$number->copyfrom($data);
$number->save();
$number->reset();
}
}

Очевидно, как и где вы это сделаете, зависит, например, от того, как вы структурировали свой код. contact->post() а также contact->put() могут быть применимыми местами.

0

Другие решения

Других решений пока нет …