在新旧迁移期间从列更改为行- Laravel



我正在尝试使用迁移将旧数据库转换为新格式(切换到Laravel促使我规范化数据)

我的旧表是用于"选择"的。对于垃圾,以下是列:

id | litter_id | 1_1 | 2_1 | 3_1 | 4_1 | 5_1 | 1_2 | 2_2 | 3_2 | 4_2 | 5_2

(_1代表女性,_2代表男性)

在每个1_1或同等列下,有一个user_id(如果没有分配,则为null)

新表应该是:

id | litter_id | user_id | pick_id | gender_id

这是我到目前为止的迁移文件:

$oldPicks = DB::connection('old')->table('picks')->get();
foreach($oldPicks as $query)
{
Pick::updateOrCreate([
'litter_id' => $query->litter_id,
'user_id' => $query->notsure,
'pick_spot' => $query->notsure,
'gender_id' => $query->notsure,
'updated_at' => $query->updated_at,
]);
}

我把"notsure"在我不知道如何转换为新位置的位置

in advanced

我很幸运地在我的users表中有pick_spot和chosen_gender,它们模仿了我的picks表中的数据。所以我可以对每个旧用户进行查询并插入到新的选择表

除此之外,我不知道怎么把我的旧的移到新的lol

使用DB::connection('mysql'),您可以更改数据库的类型,如:Mysql, sqlite,…不是数据库名。

要使用迁移来更改表列和结构,您可以创建一个迁移文件并使用代码:

public function up()
{
Schema::table('picks', function (Blueprint $table) {
$table->dropColumn(['column_namw1','column_namw2']);
$table->foreignId('user_id');
$table->foreignId('litter_id');
$table->foreignId('pick_id');
$table->foreignId('gender_id');
});
}

可以修改最近数据库中的表。如果要创建新数据库,可以使用新迁移创建新目录并运行命令php artisan migrate --path=/app/database/migrations/dir迁移新的迁移。注意,您需要更改.env文件中的数据库名称,以便将新的迁移迁移到新的数据库。我希望这工作