kalibora / csv-streamed-response
使用 symfony 和 doctrine 保存内存使用的 CSV 流式响应
v0.5.0
2020-09-04 09:30 UTC
Requires
- php: >=7.1.0
- doctrine/orm: ^2.6
- goodby/csv: ^1.3
- kalibora/chunk-generator: ~0.4
- symfony/http-foundation: ^4.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- phpstan/phpstan: ^0.11.19
- phpstan/phpstan-strict-rules: ^0.11.1
- phpunit/phpunit: ^7.5
README
使用 symfony 和 doctrine 保存内存使用的 CSV 流式响应。
用法
示例 1:使用 DQL 指定列
class DefaultController extends Controller { public function csvAction(UserRepository $repository) { return CsvStreamedResponse::builder() ->setRowsFromDoctrineQueryBuilder( $repository->createQueryBuilder('u')->select('u.id, u.name') ) ->build() ; } }
示例 2:使用实体方法指定列
class DefaultController extends Controller { public function csvAction(UserRepository $repository) { return CsvStreamedResponse::builder() ->setRowsFromDoctrineQueryBuilder( $repository->createQueryBuilder('u'), function ($user) { return [ $user->getId(), $user->getName(), ]; } ) ->setCsvColumnHeaders([ 'user_id', 'user_name', ]) ->build() ; } }
示例 3:在 QueryBuilder 中获取一个多对多集合
抑制错误 在类 ... 中使用 fetch join 迭代
。
class DefaultController extends Controller { public function csvAction(UserRepository $repository) { $qb = $repository->createQueryBuilder('u') ->leftJoin('u.emails', 'em') // Join to-many collection ; return CsvStreamedResponse::builder() ->setRowsFromDoctrineQueryBuilder( $qb, function ($user) { return [ $user->getId(), $user->getName(), implode(',', $user->getEmails()), ]; }, $fetchJoinCollection = true ) ->setCsvColumnHeaders([ 'user_id', 'user_name', 'emails', ]) ->build() ; } }