Existe-t-il un moyen de détecter si une table de base de données existe avec Laravel

87

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 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?

Ehsan Zargar Ershadi
la source
Pouvez-vous dire à quel fichier vous avez ajouté ce code?
Yasser Moussa

Réponses:

218

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

Schema::hasTable('mytable');
Phill Sparks
la source
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'hasTable', Je l'ai utilisé DB::hasTable('test')parce que la classe Schema est introuvable.
151291
10
essayez DB :: connection ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
final
J'essaye ça et ça marche ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien
Schema :: connection ("bio_db") -> hasTable ('deviceLogs_11_2019')
pankaj kumar
23

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

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

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

Schema::dropIfExists('table_name');

Il supprimera la table si la table existe.

Frère Rajoriya
la source
4

si vous utilisez une connexion différente, vous devez suivre ma réponse.

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

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

Pankaj Kumar
la source
3

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 …
}
McKendricks
la source
1
Merci! .. J'utilise Laravel 3.
Ehsan Zargar Ershadi
Ce n'est pas entièrement compatible entre les types de bases de données. Par exemple, cela ne fonctionne pas avec Sqlite ou Oracle.
Benubird
0

Dépendez plutôt de la requête de schéma d'informations au lieu de vérifier 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 'table_name'valeur.

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

Bimal Poudel
la source
0

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

Schema::hasTable('mytable')

Notez que dans certains cas, votre application utilise différentes connexions. Dans ce cas, vous devez utiliser:

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

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

guyaloni
la source