staudenmeir/laravel-migration-views
| Install | |
|---|---|
composer require staudenmeir/laravel-migration-views |
|
| Latest Version: | v1.12 |
| PHP: | ^8.3 |
| License: | MIT |
| Last Updated: | Mar 1, 2026 |
| Links: | GitHub · Packagist |
Laravel Migration Views
This Laravel extension adds support for SQL views in database migrations.
Supports Laravel 5.5+.
Installation
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"
Versions
| 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 |
Usage
- Creating Views
- Renaming Views
- Dropping Views
- Checking For View Existence
- Listing View Columns
- Materialized Views
Creating Views
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);
View Processing Algorithm
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');
Renaming Views
Use renameView() to rename a view:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
Schema::renameView('active_users', 'users_active');
Dropping Views
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+).
Checking For View Existence
Use hasView() to check whether a view exists:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
if (Schema::hasView('active_users')) {
//
}
Listing View Columns
Use getViewColumnListing() to get the column listing for a view:
use Staudenmeir\LaravelMigrationViews\Facades\Schema;
$columns = Schema::getViewColumnListing('active_users');
Materialized Views
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')) {
//
}
Contributing
Please see CONTRIBUTING and CODE OF CONDUCT for details.
Related Packages
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.