Слияние коллекций с несколькими ключами в Laravel 5.7 - PullRequest
0 голосов
/ 10 сентября 2018

Итак, я собираю данные из внешнего API в Laravel 5.7 и мне нужно собрать данные из 3 методов в одну строку, используя Eloquent (я не делаю эти правила). Эти функции в настоящее время возвращают коллекции, где мне нужно объединить их в одну коллекцию, а затем поместить в базу данных. У меня есть общие параметры, являющиеся следующими для всех коллекций:

[uniqueID, date]

Это потому, что я получу несколько одинаковых uniqueID, но с разными датами, поэтому уникальность - это комбинация date + uniqueID.

Вот пример псевдокода того, чего я хочу реально достичь:

public function getParamSet1()
{
    // some code gets the params to put into this collection
    // this is a fairly big pull and has a few nested loops to
    // put values into the below collection.
    $aggregateParamSet1 = collect(['param1', 'uniqueID', 'date', ]);
    return aggregateParamSet1;
}

public function getParamSet2()
{
    // some code gets the params to put into this collection
    // this is a fairly big pull and has a few nested loops to
    // put values into the below collection.
    $aggregateParamSet2 = collect(['param2', 'uniqueID', 'date', ]);
    return $aggregateParamSet2;
}

public function getParamSet3()
{
    // some code gets the params to put into this collection
    // this is a fairly big pull and has a few nested loops to
    // put values into the below collection.
    $aggregateParamSet3 = collect(['param3', 'uniqueID', 'date', ]);
    return $aggregateParamSet3;

}

public function writeToDB()
{
    $collection1 = getParamSet1();
    $collection2 = getParamSet2();
    $collection3 = getParamSet3();
    // merge these collections then update/create the records with
    // Eloquent

}

То, что я не слишком знаком с Laravel, заставляет меня думать, что у меня должно быть отдельное поле в коллекциях, которое объединяет дату + идентификатор, чтобы создать действительно уникальный идентификатор и объединить его на основе этого ключевого слова, если я правильно понимаю документы Коллекции, однако я думаете, должен быть лучший, более эффективный способ сделать это? Был бы признателен за проверку работоспособности с некоторыми способами управления 3 вызовами с разными возвращаемыми данными (с общим идентификатором и датой), которые необходимо объединить в одну строку.

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете записать данные в базу данных для каждого параметра paramSet, используя метод Model::updateOrCreate($where, $update) eloquent. Вставьте uniqueId и date в массив $where, а остальные данные - в массив $update. Это сохранит все записи БД для Модели уникальными для каждой комбинации date-uniqueID.

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