【Laravel】複数のSQLを一括実行する DB::unprepared
【Laravel】複数のSQLを一括実行する DB::unprepared
Laravel で複数のSQLを一括実行する DB::unprepared を使用する
DB::unprepared を使用する
DB::Insert などを使用する場合、1つのSQL文ずつしか流せません。
複数のSQL文を実行するとエラーになります。
そこで DB::unprepared を使用します。
$sql = file_get_contents(database_path('dump.sql'));
DB::unprepared($sql);
これによりDBのdumpファイルから一括でDBの生成などが可能です。
注意点
エラーを発するのは1つ目のSQLだけのようです。 以下のような2つ目以降のSQLがエラーになってもエラーが出ないので注意してください。
$sql = <<<SQL
-- 1つ目のSQL
SELECT
*
FROM
information_schema.COLUMNS;
-- 2つ目のSQL(存在しないテーブル
SELECT
*
FROM
temp;
SQL;
DB::unprepared($sql);
2つ目のSQLは存在しないテーブルを指定していますがこれではエラーが出ません。