Как преобразовать двухуровневый массив в одноуровневый массив в laravel - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть массив данных массива, которые пришли из базы данных. А мой "конвертер массива в xml" может конвертировать только один массив уровней.

Обычно я хочу преобразовать свою таблицу базы данных в файл XML.

 public function downloadXml()
{
    $fields = ['created_at', 'updated_at'];
    $products = Product::where('user_id', auth()->id())
               ->exclude($fields)->get()->toArray();// this is returnin array of array like [0 => [], 1 => []]

    $products = array_collapse($products); 
    $result = ArrayToXml::convert($product, 'product');
}

Проблема в том, что array_collapse метод обрезает массив одного уровня, но дает мне только последний массив, а не все массивы. Как я могу получить все массивы? Любая помощь приветствуется ..

Редактировать: когда дд (Product::where('user_id', auth()->id()) ->exclude($fields)->get()->toArray(););

Выход1 = массив: 2 [▼ 0 => массив: 18 [▶] 1 => массив: 18 [▶]]

Когда дд (array_collapse(Product::where('user_id', auth()->id()) ->exclude($fields)->get()->toArray());)

Выход2 = массив: 18 [▶]

Мне нужно что-то вроде output2, но проблема в output2 при условии, что есть только один продукт, но на самом деле есть два продукта.

1 Ответ

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

При выполнении запроса к базе данных с использованием Eloquent (Laravel ORM) результаты возвращаются в коллекцию (по одному на строку).Это массив «первого уровня», о котором вы упоминаете.

К сожалению, массив «второго уровня» необходим для определения атрибутов (среди прочих) для каждой строки.

Так что у вас естьчтобы:

  1. расширить конвертер ArrayToXml для работы с коллекциями Laravel (т. е. распечатать тег xml, просмотреть элементы и напечатать закрывающий тег xml)
  2. Разделить ваш конвертер xml на две части: оболочка для открытия и закрытия тега xml и вашего текущего ArrayToXml :: convert внутри функции карты.

Позвольте мне проиллюстрировать последнее:

public function downloadXml()
{
    return Product::where('user_id', auth()->id())
       ->get()
       ->map(function (Product $product){
            return ArrayToXml::convert($product->only('id', 'user_id'), 'product');
       })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...