在我的工作地点,决定尝试对我们的某些网站进行现代化,这些网站是用原始PHP编写的。鉴于此,我们经过一些研究似乎是一个明智的选择,朝Laravel迈进了一步。
最近,我一直在研究数据迁移,因为我们有一个应用程序可为大约500个需要移动其数据的客户端提供服务。使用定制的PHP类对该数据进行加密以处理加密和解密。
因此,我已采取以下步骤来处理迁移
我现在有一个名为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