Doctrine 删除前检查表是否存在?

Doctrine 删除前检查表是否存在?,doctrine,doctrine-1.2,Doctrine,Doctrine 1.2,我想在放下桌子之前检查一下桌子是否存在。我已经阅读了Doctrine_表的API文档,但似乎找不到类似的内容。有什么我遗漏的吗 我的代码如下所示: $table = new Doctrine_Table('model_name', $conn); $export = new Doctrine_Export(); $export->dropTable($table->getTableName()); 当一个表不存在时,我得到的错误是: 致命错误:未捕获异常“Doctrine\u

我想在放下桌子之前检查一下桌子是否存在。我已经阅读了Doctrine_表的API文档,但似乎找不到类似的内容。有什么我遗漏的吗

我的代码如下所示:

$table = new Doctrine_Table('model_name', $conn);

$export = new Doctrine_Export();

$export->dropTable($table->getTableName());
当一个表不存在时,我得到的错误是:

致命错误:未捕获异常“Doctrine\u Connection\u Mysql\u 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 ...

您也可以使用条令运行本机SQL查询。

如果您只想在表存在时返回true/false,我就是这么做的:

public function checkTable($table)
{
    $conn = Doctrine_Manager::connection();
    try { $conn->execute("DESC $table"); }
    catch (Exception $e) { return false; }
    return true;
}
Doctrine2方法是:

$schemaManager = $this->getDoctrine()->getConnection()->getSchemaManager();
if ($schemaManager->tablesExist(array('users')) == true) {
      // table exists! ...
}

(对死灵巫术表示抱歉,但这与我正在寻找的内容有关。)首先,您可以捕获dropTable()抛出的Doctrine_Connection_Mysql_异常(或其父异常,对于不可知论),并忽略出现的错误。第二,不释放你创建的条令查询将导致内存泄漏。这种方法非常直观这是最简单也是最省力的检查方法。在我的例子中,我必须通过Doctrine EntityManager获得对SchemaManager的引用,如下所示:$em->getConnection()->getSchemaManager();