@Mazino

Как сериализовать свойства объекта в многомерную структуру?

Я пользуюсь фреймворком Laravel, соотвественно когда совершаю запрос к бд, как результат получаю такую структуру:
Collection {#288 ▼
  #items: array:7 [▼
    0 => {#323 ▼
      +"record_id": 1
      +"city_id": 4
      +"value": "90"
      +"from_date": "2017-11-01 00:00:00"
      +"to_date": "2018-11-30 23:59:59"
    }
    1 => {#321 ▼
      +"record_id": 2
      +"city_id": 4
      +"value": "70"
      +"from_date": "2018-12-01 00:00:00"
      +"to_date": "2019-03-31 23:59:59"
    }
    2 => {#324 ▶}
    3 => {#326 ▶}
    4 => {#327 ▶}
    5 => {#328 ▶}
    6 => {#329 ▶}
  ]
}

Как ее средствами Eloqunet или нативным php привести к
виду
Collection {#288 
  #items: array:3 [
   + city_id(4) => {
      + value(90) => {
         +"from_date": "2017-11-01 00:00:00"
         +"to_date": "2018-11-30 23:59:59"
       }
       + value(70) => {
         +"from_date": "2018-12-01 00:00:00"
         +"to_date": "2019-11-30 23:59:59"
       }
    }
    + city_id(3) => {
    //etc
    }
}


В документации к Eloquenet есть много методов, которые позволяют получить похожий результат, но возможно из-за отсутствия полного понимания того, как достигнуть результата, у меня не выходит. На данный момент лучшее что у меня
вышло:
Collection {#345 ▼
  #items: array:3 [▼
    4 => Collection {#338 ▼
      #items: array:3 [▼
        90 => Collection {#335 ▼
          #items: array:1 [▼
            0 => {#323 ▼
              +"value": "90"
              +"from_date": "2017-11-01 00:00:00"
              +"to_date": "2018-11-30 23:59:59"
            }
          ]
        }
        70 => Collection {#336 ▶}
        60 => Collection {#337 ▶}
      ]
    }
    3 => Collection {#341 ▼
      #items: array:2 [▼
        90 => Collection {#339 ▼
          #items: array:1 [▼
            0 => {#326 ▼
              +"value": "90"
              +"from_date": "2017-11-01 00:00:00"
              +"to_date": "2019-02-28 23:59:59"
            }
          ]
        }
        60 => Collection {#340 ▶}
      ]
    }
    10 => Collection {#344 ▶}
  ]
}

Почти, но из-за промежуточного массива в конце вызов нужного свойства будет выглядеть подобным city_id->value[0]->property, что не очень хорошо, поскольку потом данные нужно будет упаковать в json и дальше уже работает на клиентской стороне. Как это сделать правильно?
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
->groupBy('city_id')

edit: ->groupBy('city_id')->map->groupBy('value')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы