Saya ingin bisa membuat tabel menggunakan
Schema::create('mytable',function($table)
{
$table->increments('id');
$table->string('title');
});
Tetapi sebelumnya saya ingin memeriksa apakah tabel tersebut sudah ada, mungkin seperti
Schema::exists('mytable');
Namun, fungsi di atas tidak ada. Apa lagi yang bisa saya gunakan?
Jawaban:
Jika Anda menggunakan Laravel 4 atau 5 maka ada
hasTable()
metodenya, Anda dapat menemukannya di kode sumber L4 atau dokumen L5 :Schema::hasTable('mytable');
sumber
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'hasTable'
, Saya gunakanDB::hasTable('test')
karena kelas Schema tidak ditemukan.DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Untuk membuat tabel baru hanya ada satu pemeriksaan dengan fungsi Laravel Schema
hasTable
.if (!Schema::hasTable('table_name')) { // Code to create table }
Tetapi jika Anda ingin menjatuhkan tabel apa pun sebelum memeriksa keberadaannya maka Skema memiliki fungsi yang dipanggil
dropIfExists
.Schema::dropIfExists('table_name');
Ini akan menjatuhkan tabel jika tabel akan ada.
sumber
jika Anda menggunakan koneksi yang berbeda maka Anda harus pergi dengan jawaban saya.
Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')
Di sini, pada
hasTable()
fungsi Anda dapat mengirimkan lebih dari 1 nama tabel.sumber
Tidak ada fungsi bawaan untuk ini di L3. Anda bisa melakukan kueri mentah:
$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 … }
sumber
Sebaliknya, bergantung pada kueri skema informasi daripada memeriksa beberapa data di tabel dengan
COUNT()
.SELECT table_schema FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'table_name';
Ubah
'table_name'
nilai Anda .Jika Anda mendapatkan satu keluaran baris, itu berarti tabel tersebut ada.
sumber
Seperti yang dijawab Phill Sparks, Anda dapat memeriksa apakah sebuah tabel ada dengan menggunakan:
Schema::hasTable('mytable')
Perhatikan bahwa ada kasus aplikasi Anda menggunakan koneksi yang berbeda. Dalam kasus ini, Anda harus menggunakan:
Schema::connection('myConnection')->hasTable('mytable')
(Jangan lupa gunakan
use Schema;
di awal kode Anda).sumber