を使用してテーブルを作成できるようにしたい
Schema::create('mytable',function($table)
{
$table->increments('id');
$table->string('title');
});
しかしその前に、テーブルがすでに存在するかどうかを確認したいと思います。
Schema::exists('mytable');
ただし、上記の機能はありません。他に何を使用できますか?
を使用してテーブルを作成できるようにしたい
Schema::create('mytable',function($table)
{
$table->increments('id');
$table->string('title');
});
しかしその前に、テーブルがすでに存在するかどうかを確認したいと思います。
Schema::exists('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')
スキーマクラスが見つからないため使用しました。
DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
新しいテーブルを作成するには、Laravelスキーマ関数によるチェックは1つだけhasTable
です。
if (!Schema::hasTable('table_name')) {
// Code to create table
}
ただし、テーブルの存在を確認する前にテーブルを削除する場合、スキーマにはdropIfExists
。という関数があります。
Schema::dropIfExists('table_name');
テーブルが存在する場合は、テーブルを削除します。
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 …
}
むしろ、COUNT()
。を使用してテーブル内の一部のデータをチェックするのではなく、情報スキーマクエリに依存します。
SELECT table_schema
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name = 'table_name';
'table_name'
値を変更します。
1行の出力が得られた場合は、テーブルが存在することを意味します。