gpt4 book ai didi

php - Laravel 通过 SQL 文件播种

转载 作者:行者123 更新时间:2023-12-03 17:32:34 24 4
gpt4 key购买 nike

我正在尝试从播种机中的 .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);
}

为什么?

最佳答案

我通过从我试图通过 DB::unprepared() 执行的 .sql 文件中删除事务来解决我自己的问题。 .奇怪的是,事务在执行 php artisan migrate:refresh --seed 时完全失败了。 ,但如果我稍后通过 php artisan db:seed --class SqlSeeder 单独调用 SqlSeeder,它们就可以工作。 .目前没有外键约束,并且 InnoDB 被选为引擎,可以肯定的是,但事务仍然会失败并根据命令工作。

我想这完全取决于如何Illuminate\Database\Seeder::call在内部工作并调用播种机类,但我不确定。

关于php - Laravel 通过 SQL 文件播种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49498886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com