Apakah ada cara untuk mendeteksi jika tabel database ada dengan Laravel

88

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?

Ehsan Zargar Ershadi
sumber
Bisakah Anda memberi tahu file apa Anda menambahkan kode ini?
Yasser Moussa

Jawaban:

224

Jika Anda menggunakan Laravel 4 atau 5 maka ada hasTable()metodenya, Anda dapat menemukannya di kode sumber L4 atau dokumen L5 :

Schema::hasTable('mytable');
Phill Sparks
sumber
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'hasTable', Saya gunakan DB::hasTable('test')karena kelas Schema tidak ditemukan.
151291
10
coba DB :: connection ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
efinal
saya mencoba ini dan berhasil ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien
Skema :: koneksi ("bio_db") -> hasTable ('deviceLogs_11_2019')
pankaj kumar
24

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.

Brn. Rajoriya
sumber
4

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.

pankaj kumar
sumber
3

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 …
}
mckendricks
sumber
1
Terima kasih! .. Saya menggunakan Laravel 3.
Ehsan Zargar Ershadi
Ini tidak sepenuhnya kompatibel lintas jenis database. Misalnya, ini tidak berfungsi dengan Sqlite atau Oracle.
Benubird
0

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.

Bimal Poudel
sumber
0

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

guyaloni
sumber