insert batch and update batch in laravel
Find a file
2024-07-26 07:09:11 -03:00
src Update Batch.php 2024-07-26 07:09:11 -03:00
tests fix: add tests for boolean values in batch update 2021-01-25 18:46:44 +08:00
.gitignore improved coding style and documentation 2020-07-22 09:55:18 +05:30
composer.json Check Json types 2021-06-13 13:00:43 +03:00
LICENSE Initial commit 2017-10-07 14:11:02 +03:30
README.md Update README.md 2024-07-26 07:04:27 -03:00

Custom ESCAPE "\" for pgsql

Remove double "\" from pgsql update query

Laravel BATCH (BULK)

Insert and update batch (bulk) in laravel

License Latest Stable Version Total Downloads Daily Downloads

Install

composer require mavinoo/laravel-batch

Service Provider

file app.php in array providers :

Mavinoo\Batch\BatchServiceProvider::class,

Aliases

file app.php in array aliases :

'Batch' => Mavinoo\Batch\BatchFacade::class,

Example Update Multiple Condition

use App\Models\User;

$userInstance = new User;
$arrays = [
     [
         'conditions' => ['id' => 1, 'status' => 'active'],
         'columns'    => [
             'status' => 'invalid'
             'nickname' => 'mohammad'
         ],
     ],
     [
         'conditions' => ['id' => 2],
         'columns'    => [
             'nickname' => 'mavinoo',
             'name' => 'mohammad',
         ],
     ],
     [
         'conditions' => ['id' => 3],
         'columns'    => [
             'nickname' => 'ali'
         ],
     ],
];
$keyName = 'id';

Batch::updateMultipleCondition($userInstance, $arrays, $keyName);
or
batch()->updateMultipleCondition($userInstance, $arrays, $keyName);

Example Update 2

use App\Models\User;

$userInstance = new User;
$value = [
     [
         'id' => 1,
         'status' => 'active',
         'nickname' => 'Mohammad'
     ] ,
     [
         'id' => 5,
         'status' => 'deactive',
         'nickname' => 'Ghanbari'
     ] ,
];
$index = 'id';

Batch::update($userInstance, $value, $index);
or
batch()->update($userInstance, $values, $index);

Example Update 3

use App\Models\User;

$userInstance = new User;
$value = [
     [
         'id' => 1,
         'status' => 'active'
     ],
     [
         'id' => 5,
         'status' => 'deactive',
         'nickname' => 'Ghanbari'
     ],
     [
         'id' => 10,
         'status' => 'active',
         'date' => Carbon::now()
     ],
     [
         'id' => 11,
         'username' => 'mavinoo'
     ]
];
$index = 'id';

Batch::update($userInstance, $value, $index);
or
batch()->update($userInstance, $values, $index);

Example Increment / Decrement

use App\Models\User;

$userInstance = new User;
$value = [
     [
         'id' => 1,
         'balance' => ['+', 500] // Add
     ] ,
     [
         'id' => 2,
         'balance' => ['-', 200] // Subtract
     ] ,
     [
         'id' => 3,
         'balance' => ['*', 5] // Multiply
     ] ,
     [
         'id' => 4,
         'balance' => ['/', 2] // Divide
     ] ,
     [
         'id' => 5,
         'balance' => ['%', 2] // Modulo
     ] ,
];
$index = 'id';

Batch::update($userInstance, $value, $index);
or
batch()->update($userInstance, $values, $index);

Example Insert

use App\Models\User;

$userInstance = new User;
$columns = [
     'firstName',
     'lastName',
     'email',
     'isActive',
     'status',
];
$values = [
     [
         'Mohammad',
         'Ghanbari',
         'emailSample_1@gmail.com',
         '1',
         '0',
     ] ,
     [
         'Saeed',
         'Mohammadi',
         'emailSample_2@gmail.com',
         '1',
         '0',
     ] ,
     [
         'Avin',
         'Ghanbari',
         'emailSample_3@gmail.com',
         '1',
         '0',
     ] ,
];
$batchSize = 500; // insert 500 (default), 100 minimum rows in one query

$result = Batch::insert($userInstance, $columns, $values, $batchSize);
or
$result = batch()->insert($userInstance, $values, $index);
// result : false or array

sample array result:
Array
(
    [totalRows]  => 384
    [totalBatch] => 500
    [totalQuery] => 1
)

Example called from model

Add HasBatch trait into model:

namespace App\Models;

use Mavinoo\Batch\Traits\HasBatch;

class User extends Model
{
    use HasBatch;
}

And call batchUpdate() or batchInsert() from model:

use App\Models\User;

// ex: update
User::batchUpdate($value, $index);

// ex: insert
User::batchInsert($columns, $values, $batchSize);

Helper batch()

// ex: update

$result = batch()->update($userInstance, $value, $index);


// ex: insert

$result = batch()->insert($userInstance, $columns, $values, $batchSize);

Tests

If you don't have phpunit installed on your project, first run composer require phpunit/phpunit

In the root of your laravel app, run ./vendor/bin/phpunit ./vendor/mavinoo/laravel-batch/tests

Donate

USDT Address: 0x98410956169cdd00a43fe895303bdca096f37062