是否有任何方法可以检测Laravel中是否存在数据库表

ssgvzors  于 2023-03-04  发布在  其他
关注(0)|答案(7)|浏览(218)

我希望能够使用

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

但在此之前,我想检查该表是否已经存在,可能类似于

Schema::exists('mytable');

但是,上面的功能并不存在,我还能用什么呢?

23c0lvtd

23c0lvtd1#

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

Schema::hasTable('mytable');
pkln4tw6

pkln4tw62#

要创建新表,只需通过Laravel Schema函数hasTable进行一次检查。

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

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

Schema::dropIfExists('table_name');

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

yv5phkfx

yv5phkfx3#

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

Schema::hasTable('mytable')

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

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

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

6tr1vspr

6tr1vspr4#

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

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

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

guicsvcw

guicsvcw5#

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 …
}
pobjuy32

pobjuy326#

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

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

更改'table_name'值。
如果得到一行输出,则表示表存在。

von4xj4u

von4xj4u7#

if (!Schema::hasTable('table_name')) {
 enter code here
}

仍在研究Laravel 10

相关问题