Как вставить данные из одного файла JSON во многие таблицы в Laravel, которые имеют связанные данные, используя функцию updateOrCreate? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть JSON, как это

[
    {
      "id": 11,
      "name": Tommy,
      "hobby": Football,

    },

    {
      "id": 22,
      "name": Timmy,
      "hobby": Basketball,

    }
]

У меня есть 2 стола, человек и хобби.

таблицы имеют следующие столбцы: таблица персонажа (id, имя), таблица хобби (id, person_id, hobby_name)

1 человек имеет много хобби

Я бы хотелвставьте данные json в две таблицы, используя функцию updateOrCreate.Я использую метод updateOrCreate, потому что Json будет обновлять данные каждые 5 секунд.Мне нужно создать, если человек не существует, и обновить хобби, если он существует.

Вопрос: как обновить или создать эти две таблицы?потому что я могу сделать это только с использованием 1 таблицы прямо сейчас.

1 Ответ

0 голосов
/ 29 ноября 2018

Я предполагаю, что у вас есть Person & Hobby модели с их отношениями на месте.

Поскольку вы получаете идентификатор человека из json, убедитесь, что Person модель имеет id в$fillable as

protected $fillable = ['id', 'name'];

Теперь вы можете обновлять или создавать людей и их хобби как

$json = '[
    {
      "id": 11,
      "name": "Tommy",
      "hobby": "Football"

    },
    {
      "id": 22,
      "name": "Timmy",
      "hobby": "Basketball"

    }
]';

//convert json into associative array 
$data = json_decode($json, true);

foreach ($data as $item) {
    // find the person with the id or create the person with the given id
    $person = \App\Person::updateOrCreate(['id' => $item['id']], $item);

    // update person's hobby or create the hobby for that person
    $person->hobbies()->updateOrCreate(
        ['person_id'  => $item['id']],
        ['hobby_name' => $item['hobby']]
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...