* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Flarum\Database; use Illuminate\Database\ConnectionResolverInterface as Resolver; class DatabaseMigrationRepository implements MigrationRepositoryInterface { /** * The database connection resolver instance. * * @var \Illuminate\Database\ConnectionResolverInterface */ protected $resolver; /** * The name of the migration table. * * @var string */ protected $table; /** * The name of the database connection to use. * * @var string */ protected $connection; /** * Create a new database migration repository instance. * * @param \Illuminate\Database\ConnectionResolverInterface $resolver * @param string $table */ public function __construct(Resolver $resolver, $table) { $this->table = $table; $this->resolver = $resolver; } /** * Get the ran migrations. * * @return array */ public function getRan($extension = null) { return $this->table() ->where('extension', $extension) ->orderBy('migration', 'asc') ->pluck('migration') ->toArray(); } /** * Log that a migration was run. * * @param string $file * @param string $extension * @return void */ public function log($file, $extension = null) { $record = ['migration' => $file, 'extension' => $extension]; $this->table()->insert($record); } /** * Remove a migration from the log. * * @param string $file * @param string $extension * @return void */ public function delete($file, $extension = null) { $query = $this->table()->where('migration', $file); if (is_null($extension)) { $query->whereNull('extension'); } else { $query->where('extension', $extension); } $query->delete(); } /** * Create the migration repository data store. * * @return void */ public function createRepository() { $schema = $this->getConnection()->getSchemaBuilder(); $schema->create($this->table, function ($table) { $table->string('migration'); $table->string('extension')->nullable(); }); } /** * Determine if the migration repository exists. * * @return bool */ public function repositoryExists() { $schema = $this->getConnection()->getSchemaBuilder(); return $schema->hasTable($this->table); } /** * Get a query builder for the migration table. * * @return \Illuminate\Database\Query\Builder */ protected function table() { return $this->getConnection()->table($this->table); } /** * Get the connection resolver instance. * * @return \Illuminate\Database\ConnectionResolverInterface */ public function getConnectionResolver() { return $this->resolver; } /** * Resolve the database connection instance. * * @return \Illuminate\Database\Connection */ public function getConnection() { return $this->resolver->connection($this->connection); } /** * Set the information source to gather data. * * @param string $name * @return void */ public function setSource($name) { $this->connection = $name; } }