我希望能够使用
Schema::create('mytable',function($table) { $table->increments('id'); $table->string('title'); });
但在此之前,我想检查该表是否已经存在,可能类似于
Schema::exists('mytable');
但是,上面的功能并不存在,我还能用什么呢?
23c0lvtd1#
如果您使用的是Laravel 4或5,则存在hasTable()方法,您可以在L4源代码或L5文档中找到该方法:
hasTable()
Schema::hasTable('mytable');
pkln4tw62#
要创建新表,只需通过Laravel Schema函数hasTable进行一次检查。
hasTable
if (!Schema::hasTable('table_name')) { // Code to create table }
但是,如果您想在检查表是否存在之前删除任何表,那么Schema有一个名为dropIfExists的函数。
dropIfExists
Schema::dropIfExists('table_name');
如果表存在,它将删除该表。
yv5phkfx3#
正如Phill Sparks所回答的,您可以使用以下方法检查表是否存在:
Schema::hasTable('mytable')
请注意,您的应用有时会使用不同的连接。在这种情况下,您应用途:
Schema::connection('myConnection')->hasTable('mytable')
(Don不要忘记在代码的开头使用use Schema;)。
use Schema;
6tr1vspr4#
如果您使用不同的连接,那么您必须使用我的答案。
Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')
在hasTable()函数中,您可以传递多个表名。
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 … }
pobjuy326#
相反,依赖于信息模式查询,而不是使用COUNT()检查表中的某些数据。
COUNT()
SELECT table_schema FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'table_name';
更改'table_name'值。如果得到一行输出,则表示表存在。
'table_name'
von4xj4u7#
if (!Schema::hasTable('table_name')) { enter code here }
仍在研究Laravel 10
7条答案
按热度按时间23c0lvtd1#
如果您使用的是Laravel 4或5,则存在
hasTable()
方法,您可以在L4源代码或L5文档中找到该方法:pkln4tw62#
要创建新表,只需通过Laravel Schema函数
hasTable
进行一次检查。但是,如果您想在检查表是否存在之前删除任何表,那么Schema有一个名为
dropIfExists
的函数。如果表存在,它将删除该表。
yv5phkfx3#
正如Phill Sparks所回答的,您可以使用以下方法检查表是否存在:
请注意,您的应用有时会使用不同的连接。在这种情况下,您应用途:
(Don不要忘记在代码的开头使用
use Schema;
)。6tr1vspr4#
如果您使用不同的连接,那么您必须使用我的答案。
在
hasTable()
函数中,您可以传递多个表名。guicsvcw5#
L3中没有用于此的内置函数。您可以执行原始查询:
pobjuy326#
相反,依赖于信息模式查询,而不是使用
COUNT()
检查表中的某些数据。更改
'table_name'
值。如果得到一行输出,则表示表存在。
von4xj4u7#
仍在研究Laravel 10