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?
Réponses:
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');
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.DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
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.
la source
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.la source
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 … }
la source
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.
la source
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).la source