【发布时间】:2018-09-05 00:52:06
【问题描述】:
我正在尝试从播种机中的 .sql 文件中读取数据,以用一些数据填充 3-4 个表,DatabaseSeeder.php 看起来像这样
public function run() {
$this->call([
UsersTableSeeder::class,
// Bunch of seeders using Eloquent
SqlSeeder::class
]);
}
所有其他播种器都会执行,实际上,当尝试在 SqlSeeder.php 中引发异常时,我能够停止播种。但是,SqlSeeder.php 不会通过php artisan migrate:fresh --seed 为数据库播种,似乎被绕过了。我总是需要在之后运行php artisan db:seed --class SqlSeeder,以使其成为数据库的种子。 SqlSeeder.php 是这样的
public function run() {
$path = base_path().'/database/seeds/sql/data.sql';
$sql = file_get_contents($path);
DB::unprepared($sql);
}
为什么?
【问题讨论】:
-
检查
php artisan migrate:fresh --seed之后所有从sql种子的表是否为空 -
dd(DB::unprepared($sql));的结果是什么? -
解决方案:将.sql文件封装到事务中。奇怪的是,事务和 DB::unprepared() 在调用 php artisan migrate:refresh --seed 时无法相处,但在调用 --class 时有效