![](/img/trans.png)
[英]How do you drop only 1 table using Schema Builder & Migration in Laravel 6?
[英]How do I drop a POSTGRES Table or a View in a laravel migration using eloquent?
我知道有一個與 postgres 類似的問題,但它使用原始 Sql,我正在尋找一個 laravel 遷移友好的 ORM 解決方案。 這就是為什么這個問題是不同的。 從長遠來看,這可能是正確的答案,但我想我會把它提交給社區。
有時我的數據集是表格,有時是視圖。 如果我們正在運行單元測試構建,它作為一個表存在,但在其他任何地方它都是一個視圖。
這就是我得到的。 顯然這不是主意。 這不是一個准確的條件。 雖然它可以在我想要的時候執行,但它不是真正檢查視圖是否存在。 我想要一種方法來檢查 postgres 模式以查看視圖是否存在。
if ('dev' === env('APP_ENV') || 'production' === env('APP_ENV')) {
$sql = 'DROP VIEW IF EXISTS backend.friends';
DB::statement($sql);
} else {
Schema::dropIfExists('backend.friends');
}
大多數情況下,我需要一個條件。 像這樣的東西。 任何想法好的堆棧朋友?
if (backed.friends) == view {
$sql = 'DROP VIEW IF EXISTS backend.partners';
} else {
Schema::dropIfExists('backend.friends');
}
謝謝!
答案是 Tim Lewis 建議的, staudenmeir/laravel-migration-views
package。 我們使用它的方式如下:
由於我們已經有了 laravel 使用的命名空間 class Schema,我們需要給它起別名。
use Staudenmeir\LaravelMigrationViews\Facades\Schema as ViewSchema;
然后您可以執行條件和操作,例如:
if (!empty($view) && ViewSchema::connection('<schema>')->hasView($view)) {
ViewSchema::dropViewIfExists('<schema>.' . $view);
}
(當然替換<schema>
以適用於您的情況)
在我們的例子中,我們正在從一個模式遷移到另一個模式,我們需要能夠查看視圖是否存在,否則根據情況創建或刪除它們。
基本上你以前可以在表格上做的所有事情,現在都可以應用於視圖。
ViewSchema::connection('old_schema')->hasView('example')
ViewSchema::dropViewIfExists('old_schema.'.$exampleView);
這是 repo,感謝 staudenmeir 讓這個存在! https://github.com/staudenmeir/laravel-migration-views
我敢肯定還有更多功能,但這就是我們迄今為止所需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.