2013-04-10 117 views
32

的存在是为了检测我希望能够创建一个使用有没有什么办法,如果数据库表与Laravel

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

但在这之前,我想检查表已经存在,或许有点像表

Schema::exists('mytable'); 

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

+0

你能告诉你什么文件你添加了这段代码吗? – 2017-06-10 01:17:13

回答

105

如果使用Laravel 4或5再有就是hasTable()方法,你可以找到它in the L4 source codeL5 docs

Schema::hasTable('mytable'); 
+0

'call_user_func_array()期望参数1是一个有效的回调,'Illuminate \ Database \ MySqlConnection'类没有方法'hasTable',我使用'DB :: hasTable('test')'因为Schema类没有找到。 – 151291 2017-03-22 06:44:45

+0

尝试DB ::连接('xxxx') - > getSchemaBuilder() - > hasTable('xxx') – efinal 2018-01-23 01:58:19

2

此功能在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 … 
} 
+1

谢谢!我正在使用Laravel 3. – 2013-04-12 17:04:18

+0

这不是跨数据库类型完全交叉兼容的。例如,它不适用于Sqlite或Oracle。 – Benubird 2015-01-26 14:12:21

0

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

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

更改您的'table_name'值。

如果您得到一行输出,则表示该表存在。

6

要创建一个新表,只有一个Laravel Schema函数hasTable的检查。

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

但是如果你想检查它的存在之前将降大任于是表架构有一个叫做dropIfExists功能。

Schema::dropIfExists('table_name'); 

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

相关问题