Sebuah Package untuk Sinkronisasi Data Collection.
- Sync Untuk Dua Data Collection (Singular)
- Sync Untuk Dua Data Collection (Dua Dimensi / Asosiatif)
Installasi Via Composer
composer require rembon/sync-collectionBuka file Config/app.php, Lalu Pastekan syntax berikut pada bagian Autoload Service Providers
'providers' => ServiceProvider::defaultProviders()->merge([
...
Rembon\SyncCollection\SyncCollectionServiceProvider::class,
...
])->toArray(),Pastikan anda mengimport kedua class berikut
use Rembon\SyncCollection\Services\BuildCollection;
use Rembon\SyncCollection\SyncCollection;Dipakai untuk manipulasi Collection dengan menggunakan nilai daripada Collection itu sendiri
BuildCollection::set(Collection $collection, Builder $callback)Dipakai untuk Sinkronisasi Kedua Collection yang singular
SyncCollection::withSingleBetween(Collection $old_collection, Collection $new_collection, array $unique_key_to_protect);Dipakai untuk Sinkronisasi Kedua Collection yang associative
SyncCollection::withAssociativeBetween(Collection $old_collection, Collection $new_collection, string $unique_key);Berikut adalah contoh penggunaan kasusnya.
Untuk Build Collection dapat digunakan untuk penggunaan Advance, Berikut adalah Contoh Sederhana untuk proses mapping data Collection
BuildCollection::set($oldData, function ($item) {
return $item->map(function ($val, $key) {
return $val['quantity'] > 20;
});
})Akan Menghasilkan Hasil Seperti berikut Ini:
[
0 => false,
1 => false,
2 => true
]Sinkronisasi Untuk Singular Data Collection
// Data Lama Singular
$old_data = collect([
'id' => 1,
'name' => 'item 1',
'quantity' => 10,
]);
// Data Baru Singular
$new_data = collect([
'name' => 'New Item 1',
'quantity' => 100,
]);
return SyncCollection::withSingleBetween($old_data, $new_data, ['id']);Akan menghasilkan data seperti berikut ini:
[
"id" => 1,
"name" => "New Item 1",
"quantity" => 100
]Sinkronisasi Untuk Associative Data Collection
// Data lama
$oldData = collect([
['id' => 1, 'name' => 'Item 1', 'quantity' => 10],
['id' => 2, 'name' => 'Item 2', 'quantity' => 20],
['id' => 3, 'name' => 'Item 3', 'quantity' => 30],
]);
// Data baru
$newData = collect([
['id' => 1, 'name' => 'New Item', 'quantity' => 15],
['name' => 'Another New Item', 'quantity' => 25],
['name' => 'Another New Items 2', 'quantity' => 250],
]);
return SyncCollection::withAssociativeBetween($oldData, $newData, 'id');Berikut Adalah hasil daripada Sinkronisasi Associative Data Collection:
[
"currents" => [
[
"id" => 2,
"name" => "Item 2",
"quantity" => 20
],
[
"id" => 3,
"name" => "Item 3",
"quantity" => 30
]
],
"appends" => [
[
"name" => "Another New Item",
"quantity" => 25
],
[
"name" => "Another New Items 2",
"quantity" => 250
]
],
"olds" => [
[
"id" => 1,
"name" => "Item 1",
"quantity" => 10
]
],
"updated" => [
[
"id" => 1
"name" => "New Item"
"quantity" => 15
]
]
]currentsdata yang tidak ada perubahan baik sebelum atau sesudah ada request.appendsdata baru yang tidak ada dalam data sebelumnya.oldsdata lama yang sudah tidak terpakai.updateddata baru yang menggantikan data lama yang sudah tidak terpakai.