データベースにテーブルが存在するかどうかを確認する必要があります。私は現在、Yii2を使用して開発しています。
私の場合は この質問 とは少し異なります。これは、チェックするテーブルがモデルではない(そしてモデルになることができない)ためです。
_(new \yii\db\Query())->select('*')->from($mysticTable)->exists());
_を試しました
上記の質問によると、yii\db\Query()
クラスは->queryScalar()
かどうかを尋ねられたときに->exists()
を試行するため、上記は_yii\db\Exception
_をスローします。常に、このメソッドは結果セットが存在するかどうかをチェックします。
テーブルが存在するかどうかを確認するにはどうすればよいですか?
Yii2の場合、次を使用できます。
$tableSchema = Yii::$app->db->schema->getTableSchema('tableName');
テーブルが存在しない場合は、null
が返されるため、戻り値がnull
であるかどうかを確認できます。
if ($tableSchema === null) {
// Table does not exist
}
このメソッドは公式ドキュメントで見つけることができます ここ 。
例外が発生するのは良いことです。例外メッセージを解析するだけです。テーブルが見つからない場合、非常に具体的なメッセージとSQLエラーコードが表示されます。
それは私がチェックするときにすることです。エラーが回復可能なもの、たとえば接続の切断によるものである場合と、他のエラーの場合。
または、多くの人がその情報を取得するためのはるかに直接的な方法を指摘しているようです。
スピンオフ @ msfosterの回答 私は yii2 の解決策に近づきました
/**
* @param $tableName
* @param $db string as config option of a database connection
* @return bool table exists in schema
*/
private function tableExists($tableName, $db = null)
{
if ($db)
$dbConnect = \Yii::$app->get($db);
else
$dbConnect = \Yii::$app->get('db');
if (!($dbConnect instanceof \yii\db\Connection))
throw new \yii\base\InvalidParamException;
return in_array($tableName, $dbConnect->schema->getTableNames());
}
これは、複数のデータベースにも役立ちます。