在丢弃之前检查表格是否存在?
问题描述:
我想在删除它之前检查表的存在。我已经阅读了Doctrine_Table的API文档,我似乎无法找到像这样的东西。有什么我失踪?在丢弃之前检查表格是否存在?
我有如下所示的代码:
$table = new Doctrine_Table('model_name', $conn);
$export = new Doctrine_Export();
$export->dropTable($table->getTableName());
当一个表不存在我得到的错误是:
致命错误:未捕获的异常“Doctrine_Connection_Mysql_Exception”有消息“ SQLSTATE [42S02]:基表或视图未找到:1051未知表
由于提前,
凯西
答
这里是我结束了使用......任何改进建议,欢迎:
public static function isInstalled()
{
$installed = true;
$q = Doctrine_Query::create($conn);
$q->select('t.id');
$q->from('Table t'); //the table to check
try {
$q->execute();
} catch (Doctrine_Connection_Exception $e) {
// we only want to silence 'no such table' errors
if ($e->getPortableCode() !== Doctrine_Core::ERR_NOSUCHTABLE) {
throw new Doctrine_Export_Exception($e->getMessage());
}
$installed = false;
}
return $installed;
}
答
我没有测试过的便携性,但在本地SQL你可以这样做:
DROP TABLE IF EXISTS ...
您也可以使用Doctrine运行本机SQL查询。
答
如果你只是想,如果表存在,返回真/假,这是我做的:
public function checkTable($table)
{
$conn = Doctrine_Manager::connection();
try { $conn->execute("DESC $table"); }
catch (Exception $e) { return false; }
return true;
}
+0
好的和短的建议,我的投票是为了这个。 – 2012-01-10 14:59:31
答
Doctrine2方法是:
$schemaManager = $this->getDoctrine()->getConnection()->getSchemaManager();
if ($schemaManager->tablesExist(array('users')) == true) {
// table exists! ...
}
(对不起,我的巫但这是有关)首先,您可以简单地通过dropTable()引发Doctrine_Connection_Mysql_Exception(或其父为不可知论),并在出现错误时忽略该错误。其次,不免费()您创建的Doctrine_Query将导致内存泄漏。 – lotsoffreetime 2011-07-01 14:11:52