kalibora/csv-streamed-response

使用 symfony 和 doctrine 保存内存使用的 CSV 流式响应

v0.5.0 2020-09-04 09:30 UTC

This package is auto-updated.

Last update: 2024-09-04 18:37:16 UTC


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()
        ;
    }
}