В приложении Laravel я храню сведения о пользователе в другой таблице с именем profiles
, и я решил, что было бы неплохо сохранить один столбец в виде простого массива JSON.
Этот столбец называется socialProfiles
Вот мой метод индекса ProfilesController
public function index()
{
$user = auth()->user();
if($user)
{
$profile = $user->profile;
if(!$profile)
{
// Define the social profiles array
$socialProfiles = [
'Facebook' => '',
'Twitter' => ''
];
$profile = new Profile();
$profile->user_username = $user->username;
$profile->mangedByUsername = $user->managedByUsername;
$profile->socialProfiles = json_encode($socialProfiles);
$profile->save();
}
$socialProfiles = json_decode($user->profile->socialProfiles, true);
return view('editable.people.profile', compact('user', 'socialProfiles'));
}
}
Я устанавливаю значения по умолчанию ничего для Facebook и Twitter и кодирую их в виде строки JSON, затем возвращаю пользователя и профили в представление.
В представлении у меня есть отдельные формы (внутри модальных), которые обновляют различные части профиля пользователя, и все они используют один и тот же метод, поэтому моя функция обновления выглядит следующим образом:
public function update(Request $request)
{
// TODO: Add validation before updating or adding the profile
$this->validate(request(), [
'background' => 'min:1',
'skills' => 'min:1',
]);
$user = auth()->user();
if($user)
{
// Only proceed if there is a logged in user
$profile = $user->profile;
// If there is no profile, create one for this user as they'll need one.
if (!empty(request()->get('background')))
{
$profile->background = $request->get('background');
}
if (!empty(request()->get('skills')))
{
$profile->skills = $request->get('skills');
}
if (!empty(request()->get('filepath')))
{
$profile->displayPicture = $request->get('filepath');
}
$profile->user_username = $user->username;
$profile->save();
return redirect()->back()->withSuccess('Your profile has been successfully updated');;
}
}
Если я собираюсь обновить массив JSON социального профиля, потребуется ли мне пересоздать массив, закодировать его и затем сохранить?
Причиной отдельных модальностей является то, что дизайн выглядит следующим образом:
Должно ли у меня быть много отдельных методов обновления?