[Laravel-Excel中文文档] Laravel从Modal数据中query查询数据并导出
Song •
1581 次浏览 •
0个评论 •
2022年03月19日
在前面的示例中,我们在导出类中进行了查询。虽然这对于小型出口来说是一个很好的解决方案,但对于较大的出口来说,这将付出高昂的性能代价。
通过使用FromQuery
关注点,我们可以为导出准备查询。在幕后,这个查询是分块执行的。
先上实现代码Demo
首先我们在控制器引入导出类
use App\Exports\UsersipsExport;
...
# 在控制中
$users_id = $request->users_id;
$start_time = $request->start_time;
return (new UsersipsExport(["users_id"=>$users_id,"start_time"=>$start_time]))->download(访问记录.xlsx);
接下来我们在UsersipsExport中接收参数查询,然后Return即可。
<?php
namespace App\Exports;
use App\Models\Usersips;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
class UsersipsExport implements FromQuery
{
use Exportable;
public function __construct(array $params)
{
$this->params = $params;
}
public function query()
{
# select选择要导出到Excel的字符串
$query = Usersips::select("id","province","city","ip","created_at")->where(users_id, $this->params["users_id"]);
# 当start_time没有参数是不查询
if (!empty($this->params["start_time"])) $query->where(created_at,>=, $this->params["start_time"]);
return $query;
}
}
参考文档讲解
在InvoicesExport
类中,添加FromQuery
关注点并返回查询。一定不要 ->get()
结果!
namespace App\Exports;
use App\Invoice;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
class InvoicesExport implements FromQuery
{
use Exportable;
public function query()
{
return Invoice::query();
}
}
我们仍然可以用同样的方式下载导出:
return (new InvoicesExport)->download(invoices.xlsx);
自定义查询
将自定义参数传递给查询很容易,只需将它们作为依赖项传递给导出类即可。
作为构造函数参数
namespace App\Exports;
use App\Invoice;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
class InvoicesExport implements FromQuery
{
use Exportable;
public function __construct(int $year)
{
$this->year = $year;
}
public function query()
{
return Invoice::query()->whereYear(created_at, $this->year);
}
}
现在可以将年份作为依赖项传递给导出类:
return (new InvoicesExport(2018))->download(invoices.xlsx);
作为setter
namespace App\Exports;
use App\Invoice;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
class InvoicesExport implements FromQuery
{
use Exportable;
public function forYear(int $year)
{
$this->year = $year;
return $this;
}
public function query()
{
return Invoice::query()->whereYear(created_at, $this->year);
}
}
我们可以通过以下forYear
方法调整年份:
return (new InvoicesExport)->forYear(2018)->download(invoices.xlsx);
更多相关好文
-
laravel中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
热门文章
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
-
Mac 安装mysql并且配置密码 2024-11-20
-
阿里云不同账号(跨账号)ECS服务器同地域如何实现免费内网互通? 2024-11-12
-
electron安装使用better-sqlite3并解决NODE_MODULE_VERSION xxx. This version of Node.js requires 2024-11-06
-
Zerotier+Moon+Nginx实现内网穿透搭建网站 2024-08-23
所以SheetJS实现table导出数据为Excel