На моем рабочем месте было принято решение попробовать модернизировать некоторые из наших веб-сайтов, написанных на ванильном PHP. Учитывая это, мы сделали шаг в сторону Laravel, так как после некоторых исследований это показалось разумным выбором.
Недавно я изучал миграцию данных, так как у нас есть приложение, которое обслуживает около 500 клиентов, которым нужны перемещенные данные; эти данные были зашифрованы с использованием специального класса PHP для обработки шифрования и дешифрования.
Поэтому я предпринял следующие шаги для управления миграцией
Теперь у меня есть сеялка с именем UsersTableSeeder, которая содержит все старые пользовательские данные.
В моей модели User я определил Accessors и Mutators для работы с шифрованием и дешифрованием с помощью собственных функций шифрования и дешифрования 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' => '[email protected]',
'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
Задача ещё не решена.
Других решений пока нет …