我有两个sql文件,即Cities.sql和States.sql,我使用数据库播种器来填充数据库中的数据。以下是Seeders的代码:
class CitiesTableSeeder extends Seeder
{
public function run()
{
DB::table('cities')->delete();
$sql = file_get_contents('app/database/seeds/cities.sql');
DB::statement($sql);
}
}
class StatesTableSeeder extends Seeder
{
//put your code here
public function run()
{
DB::table('states')->delete();
$sql = file_get_contents('app/database/seeds/states.sql');
DB::statement($sql);
}
}
答案 0 :(得分:0)
我认为你拥有的很好。我要说的只是使用file_get_contents('app/.....')
而不是file_get_contents(__DIR__.'/cities.sql');
,你应该找到一个更好的方式来引用目录。因为(我假设)sql文件在你的播种机旁边,你可以只使用file_get_contents(app_path('database/seeds/cities.sql'));
等,或者使用.sql
类似的东西。
那就是说,我尽量不使用SQL文件而是使用代码种子。除了没有这个困境之外,这样做的好处是你可以更加与数据库无关。例如,如果您将来切换到某个其他数据库驱动程序,而不使用与DB::insert()
文件中完全相同的语法,那么您将遇到问题。但是如果你使用{{1}}语句,你会持续很长时间。