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?
Antworten:
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');
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.DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
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.
quelle
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.quelle
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 … }
quelle
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.
quelle
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).quelle