Database Diff Utilities

1.0.7 2016-12-14 15:51 UTC


Looking For An All-In-One DB Structure Diff Tool?

If you're looking for an all-in-one database diff tool, checkout DB Diff


A simple set of utilities to be used for generating a diff between 2 database connections and their structures (not data).

Also contains a Laravel service provider and console command that can diff 2 given databases.


Install through composer.

composer require pm-connect/db-diff-utils 

Optional Add The Laravel Service Provider

Add the following line to your config/app.php file within the providers array if you wish to use the provided artisan command.



The provided diff utilities can be used in 2 ways.

  1. Using the provided objects where you need them.
  2. Using the provided artisan console command db:diff.

Using The Provided Objects

The package provides the following objects for your use:


This object provides a basic wrapper to the other available objects and is capable of running a full diff.

Example Use

The Diff object accepts in the following as constructor parameters.

  1. PMConnect\DBDiff\Utils\Contracts\Output
    • Create an implementation of this to save the output of the diff.
  2. Illuminate\Database\Connection
    • Provide connection instances to the databases you wish to diff.
    • This can be done easily using Illuminate\Database\Connectors\ConnectionFactory
    • This can also be done by manually creating instances of the connections you wish to use.
      • Illuminate\Database\MySqlConnection
      • Illuminate\Database\PostgresConnection
      • Illuminate\Database\SQLiteConnection

use PMConnect\DBDiff\Utils\Diff;
use Illuminate\Database\MySqlConnection;

$config1 = [
    'driver' => 'mysql',
    'host' => '',
    'port' => '3306,
    'database' => 'some_database',
    'collation' => 'utf8mb4_general_ci',
    'username' => 'username',
    'password' => 'password'

$config2 = [
    'driver' => 'mysql',
    'host' => '',
    'port' => '3306,
    'database' => 'some_other_database',
    'collation' => 'utf8mb4_general_ci',
    'username' => 'username',
    'password' => 'password'

// Connect to the required databases.
$dsn1 = "{$config1['driver']}:host={$config1['host']};port={$config1['port']};dbname={$config1['database']}";
$pdo1 = new PDO($dsn1, $config1['username'], $config1['password']);

$dsn2 = "{$config2['driver']}:host={$config2['host']};port={$config2['port']};dbname={$config2['database']}";
$pdo2 = new PDO($dsn2, $config2['username'], $config2['password']);

$connection1 = new MySqlConnection($pdo1, $config1['database'], $prefix = '', $config1);
$connection2 = new MySqlConnection($pdo2, $config2['database'], $prefix = '', $config2);

// Create an instance of your Output implementation to inject.
$output = new YourImplementationOfOutputContract;

// Create a diff instance with the required injections.
$diff = new Diff(

// Run the diff

Using The Laravel Artisan Console Command

This package provides an artisan console command that can diff 2 given databases for you and output the results into the console.

Provided you have added the service provider (as mentioned above) you can use the command as follows:

>>> php artisan db:diff --default-collation=utf8mb4_general_ci

This command will automatically prompt for the database connection details from you, then run the diff and output any errors to the screen.

The --default-collation option is optional and will default to 'utf8mb4_general_ci' if not provided, but can still be provided during the config of each database.


Please submit any issues using GitHubs build in issue management.