diff --git a/src/DB/Data/ArrayDiff.php b/src/DB/Data/ArrayDiff.php index d8377a5..dc72086 100644 --- a/src/DB/Data/ArrayDiff.php +++ b/src/DB/Data/ArrayDiff.php @@ -5,6 +5,7 @@ use Diff\DiffOp\DiffOpAdd; use Diff\DiffOp\DiffOpRemove; use Illuminate\Support\Arr; +use Illuminate\Support\Str; class ArrayDiff { @@ -53,10 +54,8 @@ public function tag($table) { // unset the fields to ignore $params = ParamsFactory::get(); if (isset($params->fieldsToIgnore[$table])) { - foreach ($params->fieldsToIgnore[$table] as $fieldToIgnore) { - unset($entry1[$fieldToIgnore]); - unset($entry2[$fieldToIgnore]); - } + $entry1 = Arr::except($entry1, $params->fieldsToIgnore[$table]); + $entry2 = Arr::except($entry2, $params->fieldsToIgnore[$table]); } $differ = new MapDiffer(); diff --git a/src/DB/Data/DBData.php b/src/DB/Data/DBData.php index 68e9187..040f183 100644 --- a/src/DB/Data/DBData.php +++ b/src/DB/Data/DBData.php @@ -4,6 +4,7 @@ use DBDiff\Diff\SetDBCollation; use DBDiff\Exceptions\DataException; use DBDiff\Logger; +use Illuminate\Support\Str; class DBData { @@ -24,8 +25,22 @@ function getDiff() { $targetTables = $this->manager->getTables('target'); if (isset($params->tablesToIgnore)) { - $sourceTables = array_diff($sourceTables, $params->tablesToIgnore); - $targetTables = array_diff($targetTables, $params->tablesToIgnore); + $sourceTables = array_values(array_filter( + $sourceTables, + function ($tbl) use ($params) { + foreach ($params->tablesToIgnore as $patt) + if (Str::is($patt, $tbl)) return false; + return true; + }, + )); + $targetTables = array_values(array_filter( + $targetTables, + function ($tbl) use ($params) { + foreach ($params->tablesToIgnore as $patt) + if (Str::is($patt, $tbl)) return false; + return true; + }, + )); } $commonTables = array_intersect($sourceTables, $targetTables); diff --git a/src/DB/Schema/DBSchema.php b/src/DB/Schema/DBSchema.php index bfb9d79..6663398 100644 --- a/src/DB/Schema/DBSchema.php +++ b/src/DB/Schema/DBSchema.php @@ -8,7 +8,7 @@ use DBDiff\Diff\DropTable; use DBDiff\Diff\AddTable; use DBDiff\Diff\AlterTable; - +use Illuminate\Support\Str; class DBSchema { @@ -44,8 +44,22 @@ function getDiff() { $targetTables = $this->manager->getTables('target'); if (isset($params->tablesToIgnore)) { - $sourceTables = array_diff($sourceTables, $params->tablesToIgnore); - $targetTables = array_diff($targetTables, $params->tablesToIgnore); + $sourceTables = array_values(array_filter( + $sourceTables, + function ($tbl) use ($params) { + foreach ($params->tablesToIgnore as $patt) + if (Str::is($patt, $tbl)) return false; + return true; + }, + )); + $targetTables = array_values(array_filter( + $targetTables, + function ($tbl) use ($params) { + foreach ($params->tablesToIgnore as $patt) + if (Str::is($patt, $tbl)) return false; + return true; + }, + )); } $addedTables = array_diff($sourceTables, $targetTables);