Слияние коллекций с несколькими ключами в Laravel 5.7

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

[uniqueID, date]

Это потому, что я получу несколько одинаковых uniqueID, но с разными датами, поэтому уникальность - это комбинация даты + 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, заставляет меня думать, что у меня должно быть отдельное поле в коллекциях, которое объединяет дату + ID для создания действительно уникального идентификатора и слияния на основе этого ключевого слова, если я правильно понимаю документы коллекции, однако я думаю, что это должно быть лучшим и более эффективным способом сделать это? Был бы признателен за проверку работоспособности с некоторыми способами управления 3 вызовами с возвращаемыми разными данными (с общим идентификатором и датой), которые необходимо сопоставить в одну строку.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
355
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Спасибо - я был просто озадачен, был ли это лучший способ приблизиться к этому, если я собирал много записей в каждую коллекцию - было ли лучше сделать большую коллекцию, а затем выполнить фиксацию с помощью Eloquent updatecreate - но этот способ довольно простой .

soulman 12.09.2018 15:39

Другие вопросы по теме