C'è un modo per rilevare se esiste una tabella di database con Laravel


88

Voglio essere in grado di creare una tabella usando

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

Ma prima vorrei controllare se la tabella esiste già, forse qualcosa di simile

Schema::exists('mytable');

Tuttavia, la funzione di cui sopra non esiste. Cos'altro posso usare?


Sapresti dire a quale file hai aggiunto questo codice?
Yasser Moussa

Risposte:


224

Se stai usando Laravel 4 o 5, c'è il hasTable()metodo, puoi trovarlo nel codice sorgente L4 o nei documenti L5 :

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', Ho usato DB::hasTable('test')perché la classe Schema non è stata trovata.
151291

10
prova DB :: connection ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
efinal

lo provo e funziona ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien il

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

24

Per creare una nuova tabella c'è solo un controllo dalla funzione Schema Laravel hasTable.

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

Ma se vuoi eliminare una tabella prima di verificarne l'esistenza, Schema ha una funzione chiamata dropIfExists.

Schema::dropIfExists('table_name');

Se esisterà, la tabella verrà eliminata.


4

se stai usando una connessione diversa, devi andare con la mia risposta.

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

qui sulla hasTable()funzione puoi passare più di 1 nome di tabella.


3

Nessuna funzione incorporata per questo in L3. Puoi eseguire una query grezza:

$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
Grazie! .. Sto usando Laravel 3.
Ehsan Zargar Ershadi

Non è completamente compatibile con i tipi di database. Ad esempio, non funziona con Sqlite o Oracle.
Benubird

0

Piuttosto, dipende dalla query dello schema delle informazioni invece di controllare alcuni dati nelle tabelle con COUNT().

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

Cambia il tuo 'table_name'valore.

Se ottieni un output di riga, significa che la tabella esiste.


0

Come ha risposto Phill Sparks, puoi verificare se esiste una tabella utilizzando:

Schema::hasTable('mytable')

Tieni presente che in alcuni casi l'app utilizza connessioni diverse. In questo caso, dovresti usare:

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

(Non dimenticare di usare use Schema;all'inizio del codice).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.