В моем приложении у меня есть связь между пользователем и профилем и профилем и пользователем, отношение один к одному.Это так, чтобы к отношениям можно было получить доступ из любой модели.
public function profile()
{
return $this->hasOne(Profile::class, 'user_username');
}
public function user()
{
return $this->belongsTo('App\User', 'user_username', 'username');
}
По сути, вы можете получить доступ к отношениям, ссылаясь на метод, который определяет отношения.
Так что я мог бы сделать либо $user->profile
или $profile->user
для получения любой связанной информации.
Когда пользователь заходит на определенную страницу, он должен иметь возможность просматривать и редактировать свой профиль, поэтому я определил маршрут GET и POST.
У меня есть маршруты, подобные следующим:
Route::get('/profile_edit/{user}','Editable\ProfileController@edit');
Route::post('/profile_edit/{user}','Editable\ProfileController@update');
Отображение формы
public function edit(User $user)
{
return view('editable.people.profile', compact('user'));
}
Этот метод получает информацию о профиле путем поиска в таблице пользователей по заданному шаблону, поэтому он по сути делает SELECT * FROM {wildcard}
.
Обновление профиля
В ProfileController
метод автоматически генерируется при запуске ресурса в качестве контроллера ресурсов.
public function update(Request $request, Profile $profile)
{
// ...
}
Причина, по которой япроблема в том, что многие примеры маршрутов, которые я видел, удобочитаемы для человека и имеют смысл с простой точки зрения CRUD, как показано ниже:
/posts -> show all posts
/posts{id} -> get a post by ID
/posts{id}/update -> get a post by ID and go to the update script
Если я не хочу использовать много слагов в URLесть ли способ просто получить профиль от пользователя и затем обновить его?
В приведенном мною примере
public function update(Request $request, Profile $profile)
Метод ищетэкземпляр профиля, но так как мой URL-адрес не /edit/{profile}
, мне даже нужно передать второй параметр?
Могу ли я не просто сделать следующее?
public function update(Request $request, Profile $profile)
{
$user = App\User::find($request->username);
$profile = Profile::where('user_username', $user->username);
$profile->background = $request->get('background');
$profile->skills = $request->get('skills');
$profile->user_username = $profile->user->username;
$profile->save();
}