Jaq*_*arh 12 php excel laravel laravel-excel
我试图允许用户使用带有产品信息的Laravel Excel文件下载 Excel 。我当前的网络路线如下所示:
Route::get('/excel/release', 'ExcelController@create')->name('Create Excel');
Run Code Online (Sandbox Code Playgroud)
我当前的导出如下所示:
class ProductExport implements FromQuery
{
use Exportable;
public function __construct(int $id)
{
$this->id = $id;
}
public function query()
{
return ProductList::query()->where('id', $this->id);
}
}
Run Code Online (Sandbox Code Playgroud)
我当前的控制器如下所示:
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');
}
Run Code Online (Sandbox Code Playgroud)
当我转到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
Run Code Online (Sandbox Code Playgroud)
但是,这应该包含列标题,如 ID、成本等...如何在此输出中包含列标题?
mik*_*n32 21
根据文档,您可以更改您的类以使用该WithHeadings接口,然后定义headings函数以返回列标题数组:
<?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(): array
{
return ["your", "headings", "here"];
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于所有类型的出口(FromQuery,FromCollection,等)
小智 15
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use DB;
class LocationTypeExport implements FromCollection,WithHeadings
{
public function collection()
{
$type = DB::table('location_type')->select('id','name')->get();
return $type ;
}
public function headings(): array
{
return [
'id',
'name',
];
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以将其与array_keys动态获取列标题结合起来:
use Maatwebsite\Excel\Concerns\FromCollection;
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(): array
{
return array_keys($this->query()->first()->toArray());
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将其与集合一起使用,则可以执行以下操作:
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
class ProductExport implements FromCollection, WithHeadings
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
// for selecting specific fields
//return ProductList::select('id', 'product_name', 'product_price')->get();
// for selecting all fields
return ProductList::all();
}
public function headings(): array
{
return $this->collection()->first()->keys()->toArray();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23316 次 |
| 最近记录: |