Existe alguma maneira de detectar se existe uma tabela de banco de dados com o Laravel

87

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?

Ehsan Zargar Ershadi
fonte
Você poderia dizer a qual arquivo você adicionou este código?
Yasser Moussa de

Respostas:

218

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');
Phill Sparks
fonte
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'hasTable', Eu usei DB::hasTable('test')porque a classe Schema não foi encontrada.
151291
10
tente DB :: connection ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
efinal
eu tento isso e está funcionando ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien
Schema :: connection ("bio_db") -> hasTable ('deviceLogs_11_2019')
pankaj kumar
23

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.

Brn.Rajoriya
fonte
4

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.

pankaj kumar
fonte
3

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 …
}
McKendricks
fonte
1
Obrigado! .. Estou usando o Laravel 3.
Ehsan Zargar Ershadi
Isso não é totalmente compatível com vários tipos de banco de dados. Por exemplo, não funciona com Sqlite ou Oracle.
Benubird
0

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.

Bimal Poudel
fonte
0

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

Guyaloni
fonte