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?


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');

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.


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.


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 …
}

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.


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).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.