Как различить две разные коллекции? - PullRequest
0 голосов
/ 13 апреля 2020

Итак, мой процесс такой,

вызов API для файла json, извлечение данных, которые выглядят примерно так: (давайте назовем этот вызов API)

    [
      {
        "id": 5123
        "title": "Title 1",
        "sizeOnDisk": 2040422598,
        "status": "released",
        "website": "",
        ...
      },
      {
        "id": 6123
        "title": "Title 2",
        "sizeOnDisk": 2040422598,
        "status": "released",
        "website": "",
        ...
      },
      {
        "id": 7123
        "title": "Title 3",
        "sizeOnDisk": 2040422598,
        "status": "released",
        "website": "",
        ...
      },

    ]

Теперь После того, как я получу эти данные, я получаю все данные из таблицы базы данных, которая выглядит примерно так:

| id |  title  | api_id |
------------------------
| 10 | Title 1 |  5123  |
| 12 | Title 3 |  7123  |

Теперь, если вы заметили, я пропускаю Название 2 из API в базе данных. Я пытаюсь вернуть недостающие элементы из API, которых нет в базе данных.

На данный момент я выяснил, как вернуть идентификаторы отсутствующих элементов, например:

$api = new Api();
$remoteIds = collect(json_decode(file_get_contents($api->url('movie'))))->pluck('id');
$localIds = Movie::all()->pluck('radarr_id');
$diff = $remoteIds->diff($localIds)->flatten();
return $diff;

... но мне нужно вернуть всю строку. Если я удаляю ->pluck('id'), я получаю ошибку Object of class stdClass could not be converted to string ..

Так как я могу вернуть все данные о недостающем элементе из API? Я понимаю, что могу сделать array_intersect_key, но ключи разные ..

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете использовать фильтр вместо diff .

$api = new Api();

$remoteIds = collect(json_decode(file_get_contents($api->url('movie'))));

$movies = Movie::all()->pluck('id')->values();

$diff = $remoteIds->filter(function($item) use ($movies) {
    return in_array($item->id, $movies);
});

return $diff; // Get the list of objects, not only ids
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...