105

我希望能够使用创建表

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

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

Schema::exists('mytable');

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

4

6 回答 6

265

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

Schema::hasTable('mytable');
于 2013-04-10T23:12:16.513 回答
27

要创建一个新表,Laravel Schema 函数只有一次检查hasTable

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

但是如果你想在检查它是否存在之前删除任何表,那么 Schema 有一个名为dropIfExists.

Schema::dropIfExists('table_name');

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

于 2017-05-03T05:38:33.277 回答
6

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

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

hasTable()功能上,您可以传递超过 1 个表名。

于 2019-11-26T19:32:30.273 回答
6

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

Schema::hasTable('mytable')

请注意,您的应用有时会使用不同的连接。在这种情况下,您应该使用:

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

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

于 2020-07-27T11:30:51.723 回答
4

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 …
}
于 2013-04-10T22:39:29.070 回答
0

相反,依赖于信息模式查询,而不是使用COUNT().

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

改变你的'table_name'价值。

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

于 2015-08-23T07:46:17.143 回答