web-dev-qa-db-ja.com

チェックテーブルが存在します

データベースにテーブルが存在するかどうかを確認する必要があります。私は現在、Yii2を使用して開発しています。

私の場合は この質問 とは少し異なります。これは、チェックするテーブルがモデルではない(そしてモデルになることができない)ためです。

_(new \yii\db\Query())->select('*')->from($mysticTable)->exists());_を試しました

上記の質問によると、yii\db\Query()クラスは->queryScalar()かどうかを尋ねられたときに->exists()を試行するため、上記は_yii\db\Exception_をスローします。常に、このメソッドは結果セットが存在するかどうかをチェックします。

テーブルが存在するかどうかを確認するにはどうすればよいですか?

13
iGbanam

Yii2の場合、次を使用できます。

$tableSchema = Yii::$app->db->schema->getTableSchema('tableName');

テーブルが存在しない場合は、nullが返されるため、戻り値がnullであるかどうかを確認できます。

if ($tableSchema === null) {
    // Table does not exist
}

このメソッドは公式ドキュメントで見つけることができます ここ

22
arogachev

例外が発生するのは良いことです。例外メッセージを解析するだけです。テーブルが見つからない場合、非常に具体的なメッセージとSQLエラーコードが表示されます。

それは私がチェックするときにすることです。エラーが回復可能なもの、たとえば接続の切断によるものである場合と、他のエラーの場合。

または、多くの人がその情報を取得するためのはるかに直接的な方法を指摘しているようです。

0
Amit

スピンオフ @ 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());
}

これは、複数のデータベースにも役立ちます。

0
iGbanam