有没有办法检测Laravel是否存在数据库表

Ehs*_*adi 69 php laravel

我希望能够使用创建表

Schema::create('mytable',function($table)
{
    $table->increments('id');
    $table->string('title');
});
Run Code Online (Sandbox Code Playgroud)

但在此之前,我想检查表是否已经存在,或许类似于

Schema::exists('mytable');
Run Code Online (Sandbox Code Playgroud)

但是,上述功能不存在.我还能用什么?

Phi*_*rks 186

如果您使用的是Laravel 4或5,那么有hasTable()方法,您可以在L4源代码L5文档中找到它:

Schema::hasTable('mytable');
Run Code Online (Sandbox Code Playgroud)

  • 尝试DB :: connection('xxxx') - > getSchemaBuilder() - > hasTable('xxx') (9认同)
  • @AbelCallejo 它是`Illuminate\Support\Facades\Schema` (2认同)

Brn*_*iya 15

要创建一个新表,Laravel Schema函数只能进行一次检查hasTable.

if (!Schema::hasTable('table_name')) {
    // Code to create table
}
Run Code Online (Sandbox Code Playgroud)

但是如果你想在检查它存在之前删除任何表,那么Schema有一个叫做的函数dropIfExists.

Schema::dropIfExists('table_name');
Run Code Online (Sandbox Code Playgroud)

如果表存在,它将删除表.


guy*_*oni 11

正如 Phill Sparks 回答的那样,您可以使用以下命令检查表是否存在:

Schema::hasTable('mytable')
Run Code Online (Sandbox Code Playgroud)

请注意,在某些情况下您的应用程序使用不同的连接。在这种情况下,您应该使用:

Schema::connection('myConnection')->hasTable('mytable')
Run Code Online (Sandbox Code Playgroud)

use Schema;(不要忘记在代码的开头使用)。


小智 5

如果您使用不同的连接,那么您必须采用我的回答。

Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')
Run Code Online (Sandbox Code Playgroud)

hasTable()函数中,您可以传递 1 个以上的表名。