Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CsvStreamedResponse

CSV streamed response that saves memory usage with symfony and doctrine.

Usage

example 1: Specify columns with DQL

class DefaultController extends Controller
{
    public function csvAction(UserRepository $repository)
    {
        return CsvStreamedResponse::builder()
            ->setRowsFromDoctrineQueryBuilder(
                $repository->createQueryBuilder('u')->select('u.id, u.name')
            )
            ->build()
        ;
    }
}

example 2: Specify columns with entity methods

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

example 3: Fetch join a to-many collection in QueryBuilder

Suppress error for Iterate with fetch join in class ....

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

About

CSV streamed response that saves memory usage with symfony and doctrine.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages