J'essaie de vérifier l'existence d'une table avant de le laisser tomber. J'ai lu la documentation de l'API pour doctrine_table et je n'arrive pas à trouver quelque chose comme ça. Y a-t-il quelque chose qui me manque?
J'ai un code qui ressemble à: p> et l'erreur que je reçois lorsqu'une table n'existe pas: < / p> Erreur fatale: Exception non capturée 'doctrine_connection_mysql_exception' avec message 'sqlstate [42S02]: table de base ou vue non trouvée: 1051 Table inconnue strong> P> Merci d'avance, P> Casey P> P>
4 Réponses :
Voici ce que j'ai fini avec ... Toute suggestion d'amélioration est la bienvenue:
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; }
(Désolé pour la nécromancie, mais cela est pertinent pour ce que je cherchais.) Tout d'abord, vous pourriez simplement avoir attrapé la doctrine_connection_mysql_exception (ou son parent, pour l'agnosticisme), jeté par goutte droptable () et ignorez l'erreur si elle était apparue. Deuxièmement, pas libres () La doctrine_quête que vous avez créée provoquera une fuite de mémoire.
Je n'ai pas testé la portabilité, mais dans Native SQL, vous pouvez faire:
DROP TABLE IF EXISTS ...
Si vous voulez juste retourner vrai / faux si la table existe, c'est ce que j'ai fait:
La méthode doctrine2 est la suivante:
De cette façon est très intuitive
C'est la manière la plus simple et la moins taxe de vérifier cela. Dans mon cas, je devais avoir la référence au schemamanager à travers la doctrine EntityManager comme: $ em-> getconnection () -> getschemaManager ();