Package Data | |
---|---|
Maintainer Username: | edujugon |
Maintainer Contact: | edujugon@gmail.com (Eduardo Marcos) |
Package Create Date: | 2017-06-03 |
Package Last Update: | 2018-03-16 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-15 03:01:43 |
Package Statistics | |
---|---|
Total Downloads: | 177 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 3 |
Total Watchers: | 2 |
Total Forks: | 3 |
Total Open Issues: | 0 |
Comparing DB tables data for Laravel.
type in console:
composer require edujugon/tablediff
Register TableDiff service by adding it to the providers array.
'providers' => array(
...
Edujugon\TableDiff\Providers\TableDiffServiceProvider::class
)
Let's add the Alias facade, add it to the aliases array.
'aliases' => array(
...
'TableDiff' => Edujugon\TableDiff\Facades\TableDiff::class,
)
Instance the main TableDiff class:
$diff = new \Edujugon\TableDiff\TableDiff();
Add tables to be compared
$diff->tables('base_table', 'merge_table');
Set the pivots
$diff->pivots('base_table_pivot', 'merge_table_pivot');
If the columns have the same name you could do it like follows:
$diff->pivot('pivot_name');
Now, we can run the comparison and get the report
$report = $diff->run()->withReport();
Of course, all those methods can be chained
$report = $diff->tables('base_table','merge_table')
->pivot('pivot_name')
->run()
->withReport();
Notice if you don't use
column
method, it will look for all columns with same name in both tables.
The simplest way yo do a merge is like follows
$diff->tables('base_table','merge_table')
->pivot('id')
->column('column_to_update')
->merge();
The above code snippet will update the column_to_update
column values from base_table
with the column_to_update
column values of merge_table in matched ids.
Notice that
merge
method will update the matched records and also add those records that are new for base table.
Just merging matched records
diff->tables('base_table','merge_table')
->pivot('id')
->column('column_to_update')
->mergeMatched();
Now, let's insert the new records.
diff->tables('base_table','merge_table')
->pivot('id')
->column('column_to_update')
->mergeUnMatched();
merge
, mergeMatched
and mergeUnMatched
methods accept callbacks before doing the merge and just after each update.
Before callback is perfect for casting data like. It takes the data which will be added.
$ddiff->tables('base_table','merge_table')
->pivot('id')
->column('column_to_update')
->merge(null,function(&$data){
// HERE your code
$data->column_to_update = (float) $data->column_to_update;
});
The first callback is call each time the db is updated. It takes the collection to be updated and the data with the new values
$diff->tables('base_table','merge_table')
->pivot('id')
->column('column_to_update')
->merge(function($collection,$data){
//HERE your code
});
In case of mergeUnMatched
, the first callback takes the new elements to be added and is called for each chunk (By default 10)
$diff->tables('base_table','merge_table')
->pivot('id')
->column('column_to_update')
->mergeUnMatched(function($list){
//HERE your code
});
Once the merge is done the package fires an event call Edujugon\TableDiff\Events\MergeDone
with some useful parameters
Parameters:
Extra payload can be anything you want to add the the event
$diff->eventPayload(['user' => 'John Doe']);
Kepp in mind that
eventPayload
method have to be called before callingmerge
method.
That is perfect when need to do some actions after merging like store it in db, send notification, etc..