Добавить объект в коллекцию laravel в указанном месте - PullRequest
0 голосов
/ 27 января 2019

Я хочу добавить новый объект в коллекцию laravel в каком-то указанном месте. Может ли кто-нибудь помочь мне добиться этого?

, например:

“data”: [
 {
  “provider”: ‘datechanged’,
  “unogsdate”: “2019-01-25",
  “download”: 3
 }
 {
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-25”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-25”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-25”,
 }
 {
  “provider”: ‘datechanged’,
  “unogsdate”: “2019-01-27",
  “download”: 5
 }
 {
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }{
   “id”: 54946,
   “provider”: “netflix”,
   “netflixid”: 80171173,
   “unogsdate”: “2019-01-27”,
 }

Я хочу добавить новыйзапись точно перед началом новой даты на основе записи, например, непосредственно перед датой начала unogsdate: 2019-01-25, я хочу добавить новую запись с {«provider»: «dateaged», «unogsdate»: «2019-01-25 ",« download »: 3}, как показано в примере ниже .... любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 27 января 2019

Вы можете сделать это полностью с помощью методов, доступных в Laravel Collections .

Вот как я это сделаю:

  1. Я бы сгруппировал данные по их датам.В вашем случае unogsdate.
  2. Затем я переберу коллекцию с each()
  3. Это позволило бы мне prepend() подколлекцию с нужными мне данными.
  4. Наконец, я бы flatten() собрал.

Вот пример:

$collection = collect([
    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-25'
    ],
    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-25'
    ],
    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-25'
    ],

    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-27'
    ],

    (object) [
        'id' => 54946,
        'provider' => 'netflix',
        'netflixid' => 80171173,
        'unogsdate' => '2019-01-27'
    ]
]);

return $collection->groupBy('unogsdate')
    ->each(function($value, $key) {
        return $value->prepend(
            (object) [
                'provider' => 'datechanged',
                'unogsdate' => $key,
                'downloads' => $value->count()
            ]
        );
    })
    ->flatten();

Конечно, я понятия не имею, как вы получаете фактические данные,Однако вышеприведенная коллекция напоминает ваш текущий набор данных.Вы можете легко повторно применить это к своей Коллекции.

Кроме того, вот рабочий пример , с которым вы можете поиграть:)

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