Laravel'de bir veritabanı tablosu olup olmadığını tespit etmenin herhangi bir yolu var mı


88

Kullanarak bir tablo oluşturabilmek istiyorum

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

Ama ondan önce tablonun zaten var olup olmadığını kontrol etmek istiyorum, belki

Schema::exists('mytable');

Ancak, yukarıdaki işlev mevcut değildir. Başka ne kullanabilirim?


Bu kodu hangi dosyaya eklediğinizi söyleyebilir misiniz?
Yasser Moussa

Yanıtlar:


224

Laravel 4 veya 5 kullanıyorsanız, o zaman hasTable()yöntem vardır, bunu L4 kaynak kodunda veya L5 belgelerinde bulabilirsiniz :

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', DB::hasTable('test')Schema sınıfı bulunamadığı için kullandım.
151291

10
DB :: bağlantı deneyin ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
efinal

bunu deniyorum ve işe yarıyor ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien

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

24

Yeni bir tablo oluşturmak için Laravel Schema fonksiyonunun tek bir kontrolü vardır hasTable.

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

Ancak herhangi bir tablonun varlığını kontrol etmeden önce düşürmek isterseniz, Schema adlı bir işleve sahip olursunuz dropIfExists.

Schema::dropIfExists('table_name');

Tablo olacaksa tabloyu bırakacaktır.


4

Farklı bir bağlantı kullanıyorsanız, cevabımla gitmelisiniz.

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

burada hasTable()işlevde 1'den fazla tablo adı geçirebilirsiniz.


3

Bunun için L3'te yerleşik işlev yok. Ham bir sorgu yapabilirsiniz:

$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
Teşekkürler! .. Laravel 3 kullanıyorum.
Ehsan Zargar Ershadi

Bu, veritabanı türleri arasında tam olarak uyumlu değildir. Örneğin, Sqlite veya Oracle ile çalışmaz.
Benubird

0

Bunun yerine, ile tablolardaki bazı verileri kontrol etmek yerine bilgi şeması sorgusuna bağlıdır COUNT().

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

'table_name'Değerinizi değiştirin .

Tek satırlık çıktı alırsanız bu tablonun var olduğu anlamına gelir.


0

Phill Sparks'ın yanıtladığı gibi, bir tablonun var olup olmadığını şu şekilde kontrol edebilirsiniz:

Schema::hasTable('mytable')

Uygulamanızın farklı bağlantılar kullandığı durumlar olduğuna dikkat edin. Bu durumda şunları kullanmalısınız:

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

( use Schema;Kodunuzun başında kullanmayı unutmayın ).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.