Итак, я сопоставляю данные из внешнего 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 вызовами с возвращаемыми разными данными (с общим идентификатором и датой), которые необходимо сопоставить в одну строку.






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