我希望能够使用
创建表格Schema::create('mytable',function($table)
{
$table->increments('id');
$table->string('title');
});
但在此之前,我想检查表格是否已经存在,或许像是
Schema::exists('mytable');
但是,上述功能不存在。我还能用什么呢?
答案 0 :(得分:166)
如果您使用的是Laravel 4或5,那么有hasTable()
方法,您可以找到它in the L4 source code或L5 docs:
Schema::hasTable('mytable');
答案 1 :(得分:12)
要创建一个新表,Laravel Schema函数hasTable
只能进行一次检查。
if (!Schema::hasTable('table_name')) {
// Code to create table
}
但是如果你想在检查它存在之前删除任何表,那么Schema有一个名为dropIfExists
的函数。
Schema::dropIfExists('table_name');
如果表存在,它将删除表。
答案 2 :(得分:3)
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 …
}
答案 3 :(得分:0)
相反,依赖于信息模式查询而不是使用COUNT()
检查表中的某些数据。
SELECT table_schema
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name = 'table_name';
更改您的'table_name'
值。
如果您获得一行输出,则表示该表存在。
答案 4 :(得分:0)
如果您使用其他连接,则必须回答我的答案。
Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')
在hasTable()
函数上,您可以传递多个表名。
答案 5 :(得分:0)
Phill Sparks回答时,您可以使用以下方法检查表是否存在:
Schema::hasTable('mytable')
请注意,您的应用有时会使用不同的连接。在这种情况下,您应该使用:
Schema::connection('myConnection')->hasTable('mytable')
(不要忘记在代码的开头使用use Schema;
)。