我希望能够使用
Schema::create('mytable',function($table) { $table->increments('id'); $table->string('title'); });
但在此之前,我想检查表是否已经存在,也许类似
Schema::exists('mytable');
但是,上述函数不存在。我还可以使用什么?
在 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 … }
如果你使用 Laravel4或5,那么有 hasTable()方法,你可以找到它 在 L4源代码中或 第五腰椎的医生:
hasTable()
Schema::hasTable('mytable');
而是依赖于信息模式查询,而不是使用 COUNT()检查表中的某些数据。
COUNT()
SELECT table_schema FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'table_name';
更改 'table_name'值。
'table_name'
如果得到一行输出,则表示存在该表。
要创建一个新表,LaravelSchema 函数 hasTable只有一个检查。
hasTable
if (!Schema::hasTable('table_name')) { // Code to create table }
但是,如果您想在检查表的存在之前删除任何表,那么 Schema 有一个名为 dropIfExists的函数。
dropIfExists
Schema::dropIfExists('table_name');
如果表存在,它将删除该表。
如果你使用不同的连接,那么你必须与我的答案。
Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')
here on hasTable() function you can pass more than 1 table name.
正如 Phil Sparks 所回答的,您可以使用以下方法检查表是否存在:
Schema::hasTable('mytable')
注意有些情况下你的应用程序使用不同的连接,在这种情况下,你应该使用:
Schema::connection('myConnection')->hasTable('mytable')
(不要忘记在代码的开头使用 use Schema;)。
use Schema;