Laravel database migrations with SQL views
staudenmeir/laravel-migration-views is a Laravel package for laravel database migrations with sql views.
It currently has 219 GitHub stars and 1.744.783 downloads on Packagist (latest version v1.12).
Install it with composer require staudenmeir/laravel-migration-views.
Discover more Laravel packages by staudenmeir
or browse all Laravel packages to compare alternatives.
Last updated
This Laravel extension adds support for SQL views in database migrations.
Supports Laravel 5.5+.
composer require staudenmeir/laravel-migration-views:"^1.0"
Use this command if you are in PowerShell on Windows (e.g. in VS Code):
composer require staudenmeir/laravel-migration-views:"^^^^1.0"
| Laravel | Package | |:--------|:--------| | 13.x | 1.12 | | 12.x | 1.11 | | 11.x | 1.9 | | 10.x | 1.7 | | 9.x | 1.6 | | 8.x | 1.5 | | 7.x | 1.4 | | 6.x | 1.2 | | 5.8 | 1.1 | | 5.5–5.7 | 1.0 |
Use createView() to create a view and provide a query builder instance or an SQL string:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
$query = DB::table('users')->where('active', true);
Schema::createView('active_users', $query);
You can provide the view's columns as the third argument:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
$query = 'select id from users where active = 1';
Schema::createView('active_users', $query, ['key']);
Use createOrReplaceView() to create a view or replace the existing one:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
$query = DB::table('users')->where('active', true);
Schema::createOrReplaceView('active_users', $query);
On MySQL and MariaDB, you can specify the view processing algorithm:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
$query = DB::table('users')->where('active', true);
Schema::createView('active_users', $query, algorithm: 'TEMPTABLE');
Use renameView() to rename a view:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
Schema::renameView('active_users', 'users_active');
Use dropView() or dropViewIfExists() to drop a view:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
Schema::dropView('active_users');
Schema::dropViewIfExists('active_users');
If you are using php artisan migrate:fresh, you can drop all views with --drop-views (Laravel 5.6.26+).
Use hasView() to check whether a view exists:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
if (Schema::hasView('active_users')) {
//
}
Use getViewColumnListing() to get the column listing for a view:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
$columns = Schema::getViewColumnListing('active_users');
On PostgreSQL, you can create a materialized view with createMaterializedView():
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
$query = DB::table('users')->where('active', true);
Schema::createMaterializedView('active_users', $query);
Use refreshMaterializedView() to refresh a materialized view:
Schema::refreshMaterializedView('active_users');
Use dropMaterializedView() or dropMaterializedViewIfExists() to drop a materialized view:
Schema::dropMaterializedView('active_users');
Schema::dropMaterializedViewIfExists('active_users');
Use hasMaterializedView() to check whether a materialized view exists:
if (Schema::hasMaterializedView('active_users')) {
//
}
Please see CONTRIBUTING and CODE OF CONDUCT for details.