109 votes

Existe-t-il un moyen de détecter l'existence d'une table de base de données avec Laravel ?

Je veux pouvoir créer un tableau en utilisant les éléments suivants

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

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

Schema::exists('mytable');

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

270voto

Phill Sparks Points 18340

Si vous utilisez Laravel 4 ou 5, vous disposez de l'option suivante hasTable() vous pouvez le trouver dans le code source de L4 ou le Docs L5 :

Schema::hasTable('mytable');

28voto

Bhaskar Rajoriya Points 573

Pour créer une nouvelle table, il n'y a qu'une seule vérification par la fonction Schema de Laravel. hasTable .

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

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

Schema::dropIfExists('table_name');

Si la table existe, elle sera supprimée.

8voto

guyaloni Points 585

Comme l'a répondu Phill Sparks, vous pouvez vérifier si une table existe en utilisant :

Schema::hasTable('mytable')

Remarquez qu'il y a des cas où votre application utilise différentes connexions. Dans ce cas, vous devez utiliser :

Schema::connection('myConnection')->hasTable('mytable')

(N'oubliez pas d'utiliser use Schema; au début de votre code).

6voto

pankaj kumar Points 700

Si vous utilisez une autre connexion, vous devez suivre ma réponse.

Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')

ici sur hasTable() vous pouvez passer plus d'un nom de table.

4voto

mckendricks Points 296

Aucune fonction intégrée pour cela dans 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 …
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X