在 laravel excel 中自动导出
Export automatically in laravel excel
我有疑问,我不知道如何发送参数,以便我导出的收集函数生成一个包含该数据的 excel。
我通过我的一个控制器的方法生成此查询
控制器是GenerateNumbersController.php,方法是validateNumberBD
我生成的查询如下:
$searchOrCreate = Phone::insertIgnore($consultArray);
if ($searchOrCreate) {
$phones = Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE',$searchOrCreate)
->get();
}
该查询生成了一个数据集合,我需要将其发送以自动导出。
这是我的问题开始的地方,因为我不知道如何将该变量发送到 PhonesExport class,这是生成导出到 Exce
的 class
我尝试在 PhonesExport class 中创建一个名为 data ($ value) 的新函数,如下所示:
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use App\Http\Controllers;
class PhonesExport implements FromCollection
{
public $data;
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
global $data;
return $data;
}
public function data($dato)
{
global $data;
$data = $dato;
}
}
并通过第一个代码的方法尝试生成那个class的实例,然后通过相同的参数发送它如下。
$searchOrCreate = Phone::insertIgnore($consultArray);
if ($searchOrCreate) {
$phones = Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE',$searchOrCreate)
->get();
$excel = new PhonesExport();
$excel->data($phones );
\Excel::download($excel,'phones.xlsx');
}
但是执行时它对我没有产生任何影响。
选项 1:使用依赖注入。
$searchOrCreate = Phone::insertIgnore($consultArray);
if ($searchOrCreate) {
$phones = Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE',$searchOrCreate)
->get();
$excel = new PhonesExport($phones);
\Excel::download($excel,'phones.xlsx');
}
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Collection;
class PhonesExport implements FromCollection
{
protected $phones;
public function __construct($phones)
{
$this->phones = $phones;
}
/**
* @return Collection
*/
public function collection()
{
return $this->phones;
}
}
选项 2:将查询移至导出器 class。
$searchOrCreate = Phone::insertIgnore($consultArray);
if ($searchOrCreate) {
$excel = new PhonesExport($searchOrCreate);
\Excel::download($excel,'phones.xlsx');
}
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Collection;
use App\Phone;
class PhonesExport implements FromCollection
{
protected $date;
public function __construct($date)
{
$this->date = $date;
}
/**
* @return Collection
*/
public function collection()
{
return Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE', $this->date)
->get();
}
}
选项 3:使用 readfile 强制下载。
不调用 \Excel::download(...)
,而是调用 \Excel::store(...)
,然后 return 下载文件。
// \Excel::download($excel,'phones.xlsx');
\Excel::store($excel, 'tmp.xlsx');
$filename = 'phones.xlsx';
$filepath = storage_path('app/tmp.xlsx');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filepath));
flush(); // Flush system output buffer
readfile($filepath);
exit;
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Collection;
use App\Phone;
class PhonesExport implements FromCollection
{
protected $date;
public function __construct($date)
{
$this->date = $date;
}
/**
* @return Collection
*/
public function collection()
{
return Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE', $this->date)
->get();
}
}
我有疑问,我不知道如何发送参数,以便我导出的收集函数生成一个包含该数据的 excel。 我通过我的一个控制器的方法生成此查询
控制器是GenerateNumbersController.php,方法是validateNumberBD
我生成的查询如下:
$searchOrCreate = Phone::insertIgnore($consultArray);
if ($searchOrCreate) {
$phones = Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE',$searchOrCreate)
->get();
}
该查询生成了一个数据集合,我需要将其发送以自动导出。
这是我的问题开始的地方,因为我不知道如何将该变量发送到 PhonesExport class,这是生成导出到 Exce
的 class我尝试在 PhonesExport class 中创建一个名为 data ($ value) 的新函数,如下所示:
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use App\Http\Controllers;
class PhonesExport implements FromCollection
{
public $data;
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
global $data;
return $data;
}
public function data($dato)
{
global $data;
$data = $dato;
}
}
并通过第一个代码的方法尝试生成那个class的实例,然后通过相同的参数发送它如下。
$searchOrCreate = Phone::insertIgnore($consultArray);
if ($searchOrCreate) {
$phones = Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE',$searchOrCreate)
->get();
$excel = new PhonesExport();
$excel->data($phones );
\Excel::download($excel,'phones.xlsx');
}
但是执行时它对我没有产生任何影响。
选项 1:使用依赖注入。
$searchOrCreate = Phone::insertIgnore($consultArray);
if ($searchOrCreate) {
$phones = Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE',$searchOrCreate)
->get();
$excel = new PhonesExport($phones);
\Excel::download($excel,'phones.xlsx');
}
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Collection;
class PhonesExport implements FromCollection
{
protected $phones;
public function __construct($phones)
{
$this->phones = $phones;
}
/**
* @return Collection
*/
public function collection()
{
return $this->phones;
}
}
选项 2:将查询移至导出器 class。
$searchOrCreate = Phone::insertIgnore($consultArray);
if ($searchOrCreate) {
$excel = new PhonesExport($searchOrCreate);
\Excel::download($excel,'phones.xlsx');
}
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Collection;
use App\Phone;
class PhonesExport implements FromCollection
{
protected $date;
public function __construct($date)
{
$this->date = $date;
}
/**
* @return Collection
*/
public function collection()
{
return Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE', $this->date)
->get();
}
}
选项 3:使用 readfile 强制下载。
不调用 \Excel::download(...)
,而是调用 \Excel::store(...)
,然后 return 下载文件。
// \Excel::download($excel,'phones.xlsx');
\Excel::store($excel, 'tmp.xlsx');
$filename = 'phones.xlsx';
$filepath = storage_path('app/tmp.xlsx');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filepath));
flush(); // Flush system output buffer
readfile($filepath);
exit;
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Collection;
use App\Phone;
class PhonesExport implements FromCollection
{
protected $date;
public function __construct($date)
{
$this->date = $date;
}
/**
* @return Collection
*/
public function collection()
{
return Phone::select('PHONES.PHONE','AREACODES.CODE')
->join('AREACODES','AREACODES.AREACODES_ID','=','PHONES.AREACODES_ID')
->where('DATE', $this->date)
->get();
}
}