移动框架时进行数据库迁移

时间:2018-12-07 18:12:24

标签: php mysql laravel encryption data-migration

在我的工作地点,决定尝试对我们的某些网站进行现代化,这些网站是用原始PHP编写的。鉴于此,我们经过一些研究似乎是一个明智的选择,朝Laravel迈进了一步。

最近,我一直在研究数据迁移,因为我们有一个应用程序可为大约500个需要移动其数据的客户端提供服务。使用定制的PHP类对该数据进行加密以处理加密和解密。

因此,我已采取以下步骤来处理迁移

  1. 在应用程序中使用了解密功能来解密数据
  2. 将此数据移动到CSV文件中
  3. 更新了所有列,并删除了不再使用的列
  4. 使用phpMyAdmin导入CSV文件
  5. 在我的Laravel应用程序中安装了一个程序包,该程序包可以将数据库数据转换为可以在Laravel中使用的数据库种子。

我现在有一个名为UsersTableSeeder的播种器,其中包含所有旧的用户数据。

在用户模型中,我定义了访问器和变量,以通过Laravel的本机加密和解密功能处理加密和解密。

例如,使用first_name,我执行了以下操作:

/**
 * Encrypt first_name
 *
 * @param [type] $value
 * @return void
 */
public function setFirstNameAttribute($value)
{
    $this->attributes['first_name'] = encrypt(ucfirst($value));
}

/**
 * Decrypt first_name if the field is NOT empty.
 *
 * @param [type] $value
 * @return void
 */
public function getFirstNameAttribute($value)
{
    return empty($value) ? '' : decrypt($value);
}

这种方法在从应用程序内部写入和检索数据时有效。

我的UsersTableSeeder如下:

    \DB::table('users')->insert(array (
        0 => 
        array (
            'title' => 'Mr',
            'first_name' => 'first',
            'last_name' => 'last',
            'email' => 'me@gmail.com',
            'mobile_number' => NULL,
            'member_type' => 'Active',
            'contact_by_email' => '0',
            'contact_by_phone' => '0',
            'contact_by_post' => '0',
            'remember_token' => 'pOxr1PgwQo',
            'created_at' => '2018-01-29 00:00:00',
            'updated_at' => '2018-01-29 00:00:00',
        ),

是通过反向播种我导入的数据库创建的。

问题在于\DB::table('users')->insert()无法通过User模型进行操作,因此种子运行时不会对数据进行加密。

我可以将播种器中的每个语句更改为使用User::create([]),但是编写控制台命令是否更可行?

你们中有人遇到过类似情况吗?

数据库迁移通常仅由数据库本身处理,而不是通过应用程序泵送数据吗?

我用于反向播种的软件包是:https://github.com/orangehill/iseed

0 个答案:

没有答案