Пользовательский экспорт Laravel в CSV

Я хотел бы знать, могу ли я редактировать столбцы перед экспортом файла CSV или нет?

Например, у меня есть таблица продуктов, в которой есть title description created_at updated_at. Я хочу экспортировать что-то вроде title body, как вы видите здесь, я удалил created_at, updated_at, а также переименовал свой столбец description в body это возможно?

Я использую этот пакет версии 2.1.0 Информационный график

введите здесь описание изображения

Дополнительная информация

в настоящее время я использую код экспорта по умолчанию из примеров, в том числе без дополнительных запросов и т. д. попытайтесь понять, как мне изменить свой код, чтобы экспортировать мои данные, как я хочу.

public function export() {
      $products = Product::all();
        Excel::create('products', function($excel) use($products) {
               $excel->sheet('sheet 1', function($sheet) use($products){
                $sheet->fromArray($products);
               });
        })->export('xls');

PS: я пытаюсь создать именно то, что это расширение делает в Magento,

sss

Как видите, в этом расширении мы можем change default database column names, add/remove columns и т. д. (но мне нужны только эти две опции) перед экспортом данных.

ОБНОВИТЬ

Мне удалось получить имена столбцов таблицы, например:

Product model

public function getTableColumns() {
    return $this->getConnection()->getSchemaBuilder()->getColumnListing($this->getTable());
}

а мой controller такой:

public function export(Request $request) {
      $product = new Product;
      $list = $product->getTableColumns();
      dd($list);
      //$products = Product::select($list)->get();


      // Excel::create('products', function($excel) use($products) {
        // $excel->sheet('sheet 1', function($sheet) use($products){
           // $sheet->fromArray($products);
        // });
      // })->export('xls');
}

my list dd

array:27 [▼
  0 => "id"
  1 => "title"
  2 => "slug"
  3 => "imageOne"
  4 => "imageTwo"
  5 => "short_description"
  6 => "description"
  7 => "price"
  8 => "meta_description"
  9 => "meta_tags"
  10 => "arrivalDays"
  11 => "height"
  12 => "weight"
  13 => "lenght"
  14 => "width"
  15 => "sku"
  16 => "stock"
  17 => "label"
  18 => "label_from"
  19 => "label_to"
  20 => "label_color"
  21 => "status_id"
  22 => "brand_id"
  23 => "category_id"
  24 => "subcategory_id"
  25 => "created_at"
  26 => "updated_at"
]

Вопросы

  1. Как мне изменить имена этих столбцов before export my file?
  2. Как получить флажок для каждого столбца? (объяснение ниже)

Флажок

Мне нужен флажок для каждого столбца, чтобы сказать, что этот столбец должен быть включен в экспортный файл или нет.

example Я сниму отметку со столбца created_at, чтобы он не был включен в мой экспортированный CSV-файл.

ОБНОВЛЕНИЕ 2

Хорошо, я получаю это для работы с моими пользовательскими именами. Есть маленькая проблема:

Моя строка данных будет повторяться дважды в файле excel.

Explain

Я отредактировал 5 столбца своей базы данных и получил 10

sdd

Коды

Это мой обновленный код:

public function export(Request $request) {
      $products = Product::all();
      Excel::create('products', function($excel) use($products, $request) {
        $excel->sheet('sheet 1', function($sheet) use($products, $request){

          $ddd = $request->except('_token');
          foreach($ddd as $fff){
            $ddd[] = $fff;
          }

            $sheet->fromArray($products, null, 'A1', false, false);
            $sheet->row(1, $ddd);
        });
      })->export('csv');
      return redirect()->back();
}

Есть идеи?


person mafortis    schedule 26.03.2018    source источник
comment
Я нашел, что мое решение больше не нуждается в этом вопросе.   -  person mafortis    schedule 29.03.2018


Ответы (1)


Не можете ли вы преобразовать данные перед созданием листа Excel? Например:

$products = Product::select(
    'subject as title', 
    'body as description'
)->get();

РЕДАКТИРОВАТЬ:

Из предоставленных вами обновлений это будет примерно так:

public function export(Request $request)
{
     $list = [];
     foreach($request->columns as $column){
         $list[] = $column->DatabaseHeadingName . ' as ' . $column->CustomHeadingName;
     }

    $products = Product::select($list)->get();

    Excel::create('products', function($excel) use($products) {
        $excel->sheet('sheet 1', function($sheet) use($products){
            $sheet->fromArray($products);
        });
    })->export('xls');
}
person pyy    schedule 26.03.2018
comment
Могу я? Я не знаю, смогу ли я или нет, но это то, что я хочу сделать, сначала отредактировать, а затем экспортировать. important part is, чтобы иметь возможность вводить свои собственные имена, а не определять их в контроллере, как изображение внизу моего вопроса. - person mafortis; 26.03.2018
comment
@mafortis Вы должны быть в состоянии. Можете ли вы убедиться, что приведенный выше код работает, если это так, вы сможете динамически встроить свой запрос в данные, которые вам нужны. Не могли бы вы также показать пример формы, которую пользователь отправит, чтобы указать имена полей. - person pyy; 26.03.2018
comment
В настоящее время у меня нет никакой формы на моей панели, только простая кнопка экспорта, которая работает с моей функцией provided in question, я хочу, чтобы это было так: 1-click export button-›2-bootstrap modal will open including all my products columns (columns not their rows)-›3-have some checkbox to select what columns be included export file-›4-i can change or keep my column names as they are-›5-click save button - person mafortis; 26.03.2018
comment
основываясь на вашем обновлении, что я должен зациклить на своей панели, чтобы получить имена столбцов для редактирования? $list или $products ? second question как насчет флажков? - person mafortis; 26.03.2018
comment
Ни то, ни другое. Вам нужно распечатать каждый столбец в таблице, как показано на последнем снимке экрана. А что насчет флажков? - person pyy; 26.03.2018
comment
Я не понимаю! Итак, как я могу изменить имена столбцов перед экспортом? checkboxes как я уже упоминал здесь stackoverflow.com/questions/49487888 / в no.3 + возможность редактирования имен столбцов перед экспортом. Мне также нужен флажок для каждого столбца, чтобы сказать, что этот столбец должен быть включен в экспортный файл или нет. example я сниму флажок со столбца created_at, чтобы он не был включен в мой экспортированный CSV-файл. - person mafortis; 26.03.2018
comment
Для № 3, при циклическом обходе столбцов, которые вы возвращаете, проверьте, что вы называете флажком, если он отмечен, добавьте эту строку в список $, если он не отмечен, не делайте этого. Вы можете получить имена столбцов для модели таблицы, которую я себе представляю. - person pyy; 26.03.2018
comment
Давайте продолжим обсуждение в чате. - person pyy; 26.03.2018