我正在尝试使用迁移将旧数据库转换为新格式(切换到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
文件中的数据库名称,以便将新的迁移迁移到新的数据库。我希望这工作