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

时间:2013-04-10 20:42:50

标签: php laravel

我希望能够使用

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

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

Schema::exists('mytable');

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

6 个答案:

答案 0 :(得分:166)

如果您使用的是Laravel 4或5,那么有hasTable()方法,您可以找到它in the L4 source codeL5 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;)。

相关问题