Eu quero ser capaz de criar uma mesa usando
Schema::create('mytable',function($table)
{
$table->increments('id');
$table->string('title');
});
Mas antes gostaria de verificar se a mesa já existe, talvez algo como
Schema::exists('mytable');
No entanto, a função acima não existe. O que mais posso usar?
Respostas:
Se você está usando o Laravel 4 ou 5, então existe o
hasTable()
método, você pode encontrá-lo no código-fonte L4 ou nos documentos L5 :Schema::hasTable('mytable');
fonte
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'hasTable'
, Eu useiDB::hasTable('test')
porque a classe Schema não foi encontrada.DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Para criar uma nova tabela existe apenas uma verificação pela função Laravel Schema
hasTable
.if (!Schema::hasTable('table_name')) { // Code to create table }
Mas se você quiser eliminar qualquer tabela antes de verificar sua existência, o Schema tem uma função chamada
dropIfExists
.Schema::dropIfExists('table_name');
Ele eliminará a tabela se ela existir.
fonte
se você estiver usando uma conexão diferente, terá que seguir minha resposta.
Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')
aqui na
hasTable()
função você pode passar mais de 1 nome de tabela.fonte
Nenhuma função incorporada para isso em L3. Você pode fazer uma consulta bruta:
$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 … }
fonte
Em vez disso, dependa da consulta do esquema de informações em vez de verificar alguns dados nas tabelas com
COUNT()
.SELECT table_schema FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'table_name';
Mude o seu
'table_name'
valor.Se você obtiver uma saída de linha, significa que a tabela existe.
fonte
Como Phill Sparks respondeu, você pode verificar se existe uma tabela usando:
Schema::hasTable('mytable')
Observe que há casos em que seu aplicativo usa conexões diferentes. Nesse caso, você deve usar:
Schema::connection('myConnection')->hasTable('mytable')
(Não se esqueça de usar
use Schema;
no início do seu código).fonte