Gibt es eine Möglichkeit zu erkennen, ob eine Datenbanktabelle mit Laravel vorhanden ist?

86

Ich möchte in der Lage sein, eine Tabelle mit zu erstellen

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

Aber vorher möchte ich überprüfen, ob die Tabelle bereits existiert, vielleicht so etwas

Schema::exists('mytable');

Die obige Funktion existiert jedoch nicht. Was kann ich noch verwenden?

Ehsan Zargar Ershadi
quelle
Können Sie sagen, zu welcher Datei Sie diesen Code hinzugefügt haben?
Yasser Moussa

Antworten:

217

Wenn Sie Laravel 4 oder 5 verwenden, gibt es die hasTable()Methode, die Sie im L4-Quellcode oder in den L5-Dokumenten finden :

Schema::hasTable('mytable');
Phill Sparks
quelle
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'hasTable'Ich habe verwendet, DB::hasTable('test')weil die Schema-Klasse nicht gefunden wurde.
151291
10
Versuchen Sie DB :: connection ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
am
Ich versuche das und es funktioniert ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien
Schema :: connection ("bio_db") -> hasTable ('deviceLogs_11_2019')
pankaj kumar
23

Um eine neue Tabelle zu erstellen, gibt es nur eine Überprüfung durch die Laravel-Schema-Funktion hasTable.

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

Wenn Sie jedoch eine Tabelle löschen möchten, bevor Sie ihre Existenz überprüfen, hat Schema eine Funktion namens dropIfExists.

Schema::dropIfExists('table_name');

Die Tabelle wird gelöscht, wenn eine Tabelle vorhanden ist.

Brn.Rajoriya
quelle
4

Wenn Sie eine andere Verbindung verwenden, müssen Sie mit meiner Antwort gehen.

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

Hier auf hasTable()Funktion können Sie mehr als 1 Tabellennamen übergeben.

Pankaj Kumar
quelle
3

Keine eingebaute Funktion dafür in L3. Sie können eine Rohabfrage durchführen:

$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
quelle
1
Danke! .. Ich benutze Laravel 3.
Ehsan Zargar Ershadi
Dies ist für alle Datenbanktypen nicht vollständig kompatibel. Zum Beispiel funktioniert es nicht mit Sqlite oder Oracle.
Benubird
0

Hängen Sie stattdessen von der Abfrage des Informationsschemas ab, anstatt nach Daten in den Tabellen mit zu suchen COUNT().

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

Ändern Sie Ihren 'table_name'Wert.

Wenn Sie eine Zeilenausgabe erhalten, bedeutet dies, dass die Tabelle vorhanden ist.

Bimal Poudel
quelle
0

Wie Phill Sparks antwortete, können Sie überprüfen, ob eine Tabelle vorhanden ist, indem Sie:

Schema::hasTable('mytable')

Beachten Sie, dass Ihre App in bestimmten Fällen unterschiedliche Verbindungen verwendet. In diesem Fall sollten Sie Folgendes verwenden:

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

(Vergessen Sie nicht, use Schema;am Anfang Ihres Codes zu verwenden).

Guyaloni
quelle