SchemaState.php
TLDR
The SchemaState
class is an abstract class that provides basic functionality for dumping and loading database schema into/from a file. It has methods for dumping and loading the schema, as well as for creating a new process instance and specifying the migration table and output handling.
dump
This method is used to dump the database's schema into a file.
load
This method is used to load the given schema file into the database.
makeProcess
This method is used to create a new process instance.
withMigrationTable
This method is used to specify the name of the application's migration table.
handleOutputUsing
This method is used to specify the callback that should be used to handle process output.
<?php
namespace Illuminate\Database\Schema;
use Illuminate\Database\Connection;
use Illuminate\Filesystem\Filesystem;
use Symfony\Component\Process\Process;
abstract class SchemaState
{
/**
* The connection instance.
*
* @var \Illuminate\Database\Connection
*/
protected $connection;
/**
* The filesystem instance.
*
* @var \Illuminate\Filesystem\Filesystem
*/
protected $files;
/**
* The name of the application's migration table.
*
* @var string
*/
protected $migrationTable = 'migrations';
/**
* The process factory callback.
*
* @var callable
*/
protected $processFactory;
/**
* The output callable instance.
*
* @var callable
*/
protected $output;
/**
* Create a new dumper instance.
*
* @param \Illuminate\Database\Connection $connection
* @param \Illuminate\Filesystem\Filesystem|null $files
* @param callable|null $processFactory
* @return void
*/
public function __construct(Connection $connection, Filesystem $files = null, callable $processFactory = null)
{
$this->connection = $connection;
$this->files = $files ?: new Filesystem;
$this->processFactory = $processFactory ?: function (...$arguments) {
return Process::fromShellCommandline(...$arguments)->setTimeout(null);
};
$this->handleOutputUsing(function () {
//
});
}
/**
* Dump the database's schema into a file.
*
* @param \Illuminate\Database\Connection $connection
* @param string $path
* @return void
*/
abstract public function dump(Connection $connection, $path);
/**
* Load the given schema file into the database.
*
* @param string $path
* @return void
*/
abstract public function load($path);
/**
* Create a new process instance.
*
* @param mixed ...$arguments
* @return \Symfony\Component\Process\Process
*/
public function makeProcess(...$arguments)
{
return call_user_func($this->processFactory, ...$arguments);
}
/**
* Specify the name of the application's migration table.
*
* @param string $table
* @return $this
*/
public function withMigrationTable(string $table)
{
$this->migrationTable = $table;
return $this;
}
/**
* Specify the callback that should be used to handle process output.
*
* @param callable $output
* @return $this
*/
public function handleOutputUsing(callable $output)
{
$this->output = $output;
return $this;
}
}