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

我希望能够使用

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

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

Schema::exists('mytable');

但是,上述函数不存在。我还可以使用什么?

113903 次浏览

在 L3中没有为此内置的函数。您可以执行一个原始查询:

$table = "foo";
$check = DB::only('SELECT COUNT(*) as `exists`
FROM information_schema.tables
WHERE table_name IN (?)
AND table_schema = database()',$table);
if(!$check) // No table found, safe to create it.
{
// Schema::create …
}

如果你使用 Laravel4或5,那么有 hasTable()方法,你可以找到它 在 L4源代码中第五腰椎的医生:

Schema::hasTable('mytable');

而是依赖于信息模式查询,而不是使用 COUNT()检查表中的某些数据。

SELECT table_schema
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name = 'table_name';

更改 'table_name'值。

如果得到一行输出,则表示存在该表。

要创建一个新表,LaravelSchema 函数 hasTable只有一个检查。

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

但是,如果您想在检查表的存在之前删除任何表,那么 Schema 有一个名为 dropIfExists的函数。

Schema::dropIfExists('table_name');

如果表存在,它将删除该表。

如果你使用不同的连接,那么你必须与我的答案。

Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')

here on hasTable() function you can pass more than 1 table name.

正如 Phil Sparks 所回答的,您可以使用以下方法检查表是否存在:

Schema::hasTable('mytable')

注意有些情况下你的应用程序使用不同的连接,在这种情况下,你应该使用:

Schema::connection('myConnection')->hasTable('mytable')

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