Laravelでデータベーステーブルが存在するかどうかを検出する方法はありますか


88

を使用してテーブルを作成できるようにしたい

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

しかしその前に、テーブルがすでに存在するかどうかを確認したいと思います。

Schema::exists('mytable');

ただし、上記の機能はありません。他に何を使用できますか?


このコードを追加したファイルを教えてください。
Yasser Moussa 2017年

回答:


224

Laravel 4または5を使用している場合は、hasTable()方法があります。L4ソースコードまたはL5ドキュメントで見つけることができます。

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')スキーマクラスが見つからないため使用しました。
151291 2017年

10
DB :: connection( 'xxxx')-> getSchemaBuilder()-> hasTable( 'xxx')を
試してください

私はこれを試してみて、それは機能しています...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
SyamsoulAzrien19年

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

24

新しいテーブルを作成するには、Laravelスキーマ関数によるチェックは1つだけhasTableです。

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

ただし、テーブルの存在を確認する前にテーブルを削除する場合、スキーマにはdropIfExists。という関数があります。

Schema::dropIfExists('table_name');

テーブルが存在する場合は、テーブルを削除します。


4

別の接続を使用している場合は、私の答えに従わなければなりません。

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

ここのhasTable()関数では、複数のテーブル名を渡すことができます。


3

L3にはこのための組み込み関数はありません。生のクエリを実行できます。

$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
おかげで..私はLaravel 3を使用しています!
エサンZargar Ershadi

これは、データベースタイプ間で完全に相互互換性があるわけではありません。たとえば、SqliteやOracleでは機能しません。
ベヌバード2015年

0

むしろ、COUNT()。を使用してテーブル内の一部のデータをチェックするのではなく、情報スキーマクエリに依存します。

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

'table_name'値を変更します。

1行の出力が得られた場合は、テーブルが存在することを意味します。


0

Phill Sparksが回答したように、以下を使用してテーブルが存在するかどうかを確認できます。

Schema::hasTable('mytable')

アプリが異なる接続を使用する場合があることに注意してください。この場合、次を使用する必要があります。

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

use Schema;コードの最初に使用することを忘れないでください)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.