Code Monkey home page Code Monkey logo

clevexport's Introduction

Motivation

The goal of this Laravel package is to execute the exportation to EXCEL large data/records that may cause in the crash of the server or a timeout. The idea is to divide the process in sub operations managable and easy to perform.

Installation

compose require leyton/clevexport

After the installation make sure to publish the assets

php artisan vendor:publish --provider="Leyton\ClevExportServiceProvider"

You will find the config/clevexport.php file containing all the configurations needed.

return [
    // array of listeners that will be executed once the execution is done
    'listeners' => [], 
    
    // if you want to stock the user who started the export
    'with_owner' => true,
    
    // the guard    
    'guard' => 'web',
    
    // the foreign key name in the exports table
    'owner_id' => 'user_id',
    
    // The Authenticable class
    'owner_class' => \App\Models\User:class,
    
    // Number of chunks
    'chunks' => 10,
];

Then you can run your migration

php artisan migrate

Usage

The QueryFinder should be provided with an instance of an object that implements the IseExportable Interface

 $dossierExporter = QueryFinder::getInstance($this->defaultDossierService, $this->transformer);

 PreparingExportJob::dispatch($dossierExporter, $request->all())->delay(now()->addSecond());

A second Parameter is optional and if is provided it should implement the ShouldHandleResult It is where you can perform extra work on the results and provide the headers in a ExportTransformed container If the second parameter is not provided then the headers will be the column names selected from the query.

Exportable

class UserExportable implements IsExportable
{

    /**
     * @param array $params
     * @return Builder
     */
    public function query(array $params): Builder
    {
        return  User::select('id', 'name', 'email')
            ->addSelect([
                'title' => Post::selectRaw('SUBSTRING(`content`, 1, 10) as `title`')->limit(1)
            ]);
    }
}

Transformer

class UserTransformer implements ShouldHandleResult
{

    public function transform($data): ExportTransformed
    {
        $data =   $data->map(function(User $user){
            $user->most_commented = optional($user->posts()->withCount('comments')->first())->comments_count;
            $user->comments_count = $user->comments()->count();
            $user->posts_count = $user->posts()->count();
            return $user;
        });

        return  new ExportTransformed(['id', 'name', 'email', 'title', 'Most commented', 'Comments count', 'Posts count'], $data->toArray());
    }
}

clevexport's People

Contributors

akiyamasm avatar medito avatar mehdiaroui avatar

Stargazers

Vinicius Menezes avatar Ian Hawes avatar Nikita Kiselev avatar Sharafat Ibn Mollah Mosharraf avatar Andrew G. avatar  avatar Vincent M avatar Lorenzo avatar Turan Karatuğ avatar Yunus Emre Deligöz avatar  avatar Ben avatar Kevin Jiang avatar David Molnar avatar Zafran Fadilah avatar Hendra avatar Noah Gillard avatar Flávio H. Ferreira avatar Christopher  avatar Boutzougarte walid avatar Milan Chheda avatar Younes ENNAJI avatar Sabuj Kundu avatar Brian Ngetich avatar Andrei Nastasa avatar Florian Wartner avatar Alexander G. avatar Myihbach avatar karim avatar Fatima ezzahraa Abdelhak avatar Nisrine avatar GUEDDA Ali avatar  avatar  avatar Moad avatar Oussama Lahmidi avatar ED-DAHBI Abdel Majid avatar YASSINE SABRI avatar OUMERZOUG Haïtham avatar  avatar  avatar haitam-falflaoui avatar Mouad Ziani avatar  avatar Bousseta_Abdou avatar  avatar  avatar  avatar Saad Rguig avatar

Watchers

Saad Rguig avatar  avatar  avatar  avatar

clevexport's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.