web-dev-qa-db-fra.com

Est-il possible de détecter si une table de base de données existe avec Laravel

Je veux pouvoir créer une table en utilisant

Schema::create('mytable',function($table)
{
    $table->increments('id');
    $table->string('title');
});

Mais avant cela, je voudrais vérifier si le tableau existe déjà, peut-être quelque chose comme

Schema::exists('mytable');

Cependant, la fonction ci-dessus n'existe pas. Que puis-je utiliser?

50

Si vous utilisez Laravel 4 ou 5, il existe la méthode hasTable(), vous pouvez le trouver dans le code source L4 ou dans la la documentation L5 :

Schema::hasTable('mytable');
153
Phill Sparks

Pour créer une nouvelle table, une seule vérification est effectuée par la fonction Laravel Schema hasTable.

if (!Schema::hasTable('table_name')) {
    // Code to create table
}

Mais si vous voulez supprimer une table avant de vérifier son existence, Schema a une fonction appelée dropIfExists.

Schema::dropIfExists('table_name');

Il laissera tomber la table si la table existera.

12

Pas de fonction intégrée pour cela en L3. Vous pouvez faire une requête brute:

$table = "foo";
$check = DB::only('SELECT COUNT(*) as `exists`
    FROM information_schema.tables
    WHERE table_name IN (?)
    AND table_schema = database()',$table);
if(!$check) // No table found, safe to create it.
{
    // Schema::create …
}
3
mckendricks

Dépend plutôt de la requête du schéma d’information au lieu de rechercher certaines données dans les tables avec COUNT().

SELECT table_schema 
FROM information_schema.tables
WHERE table_schema = DATABASE()
      AND table_name = 'table_name';

Changez votre valeur 'table_name'

Si vous obtenez une sortie de ligne, cela signifie que la table existe.

0
Bimal Poudel