Laravel シーダー実行時に、sql文(mysqlumpなどのダンプファイル)を実行したい。
という要件は結構あったりします。
Laravelならとても簡単にできます。
通常のデータベースシーダー ( database/seeds/MyTableSeeder.php )
<?php
use Illuminate\Database\Seeder;
class LangdicTableSeeder extends Seeder {
public function run()
{
\DB::table("mytable")->insert([
'id' => 1 ,
'name' => "ichitaro suzuki" ,
]);
}
}
↓ このように書き換えます
SQL文を実行するデータベースシーダー ( database/seeds/MyTableSeeder.php )
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class LangdicTableSeeder extends Seeder
{
public function run()
{
$path = 'database/sql/mytable_2019-05-20.sql';
\DB::unprepared(file_get_contents($path));
}
}
sqlファイルをここにおきます。 database/sql/mytable_2019-05-20.sql'
シーダーを実行します
php artisan migrate:fresh --seed
以上です。簡単ですね。