Проверка таблицы существует

Мне нужно проверить, существует ли таблица в базе данных. В настоящее время я разрабатываю с использованием Yii2.

Мой случай немного отличается от этот вопрос потому что проверяемая таблица не является (и не может быть) моделью.

я пытался (new \yii\db\Query())->select('*')->from($mysticTable)->exists());

Вышеуказанное выбрасывает yii\db\Exception потому что, согласно вопросу, связанному выше, yii\db\Query() класс пытается ->queryScalar() когда спросили, если ->exists(), Этот метод неизменно проверяет, существует ли набор результатов.

Как я могу проверить, существует ли таблица?

13

Решение

Для Yii2 вы можете использовать:

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

Если таблица не существует, она вернется null, так что вы можете проверить возвращаемое значение для того, чтобы быть null:

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

Вы можете найти этот метод в официальных документах Вот.

17

Другие решения

Хорошо, что вы получите исключение. Просто проанализируйте сообщение об исключении. Вы получите очень конкретное сообщение и код ошибки SQL для отсутствующей таблицы.

Это то, что я делаю при проверке, например Если ошибка произошла из-за чего-то, что может быть восстановлено, скажем, из-за разрыва соединения, по сравнению с какой-то другой ошибкой.

ИЛИ Я вижу, что многие люди указывали на гораздо более прямые способы получения этой информации.

0

Отключение @ msfoster’s ответ приблизил меня к решению в

/**
* @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
По вопросам рекламы [email protected]