代码之家  ›  专栏  ›  技术社区  ›  Jaquarh

在Laravel中将雄辩的内容导出到Excel时,如何包含列标题?

  •  1
  • Jaquarh  · 技术社区  · 5 年前

    我试图允许用户下载Excel,使用 Laravel Excel 包含产品信息的文件。我当前的网络路由如下所示:

    Route::get('/excel/release', 'ExcelController@create')->name('Create Excel');
    

    我当前的导出如下:

    class ProductExport implements FromQuery
    {
        use Exportable;
    
        public function __construct(int $id)
        {
            $this->id = $id;
        }
    
        public function query()
        {
            return ProductList::query()->where('id', $this->id);
        }
    }
    

    我当前的控制器如下所示:

    public function create(Request $request) {
    
        # Only alowed tables
        $alias = [
            'product_list' => ProductExport::class
        ];
    
        # Ensure request has properties
        if(!$request->has('alias') || !$request->has('id'))
            return Redirect::back()->withErrors(['Please fill in the required fields.'])->withInput();
    
        # Ensure they can use this
        if(!in_array($request->alias, array_keys($alias)))
            return Redirect::back()->withErrors(['Alias ' . $request->alias . ' is not supported'])->withInput();
    
        # Download
        return (new ProductExport((int) $request->id))->download('iezon_solutions_' . $request->alias . '_' . $request->id . '.xlsx');
    }
    

    当我走向 https://example.com/excel/release?alias=product_list&id=1 这将正确执行并返回Excel文件。但是,行没有列标题。数据的输出方式如下:

    1   150 1   3       2019-01-16 16:37:25 2019-01-16 16:37:25     10
    

    但是,它应该包含列标题,如id、cost等…如何在此输出中包含列标题?

    1 回复  |  直到 5 年前
        1
  •  1
  •   miken32 Amit D    5 年前

    根据 documentation 你可以改变你的班级使用 WithHeadings 接口,因此应该如下所示:

    <?php
    namespace App;
    
    use Maatwebsite\Excel\Concerns\FromQuery;
    use Maatwebsite\Excel\Concerns\WithHeadings;
    
    class ProductExport implements FromQuery, WithHeadings
    {
        use Exportable;
    
        public function __construct(int $id)
        {
            $this->id = $id;
        }
    
        public function query()
        {
            return ProductList::query()->where('id', $this->id);
        }
    
        public function headings()
        {
            return ["your", "headings", "here"];
        }
    }