Я использую привязку модели маршрута, чтобы получить экземпляр пользователя, а затем обновить его, если проверка прошла, а затем обновить связанное отношение к отношениям между пользователем и профилем, но я продолжаю получать ошибку , Обновление происходит у Пользователя, но не выполняется обновление профиля. Из того, что я понял из документов, это кажется правильным. Я могу получить доступ к данным профиля, используя $user->profile
, поэтому отношения выглядят нормально в моделях User и UserProfile.Laravel 5.2 Использование Associate для обновления привязок к отношениям
Может кто-нибудь увидеть, что случилось с этим контроллером действия:
public function update(Request $request, User $user)
{
$this->validate($request, [
'username' => 'required|max:32|unique:users',
'email' => 'required|email|max:128|unique:users',
'first_name' => 'required',
'last_name' => 'required',
'phone_number' => 'regex:/^([0-9\s\-\+\(\)\.]*)$/',
]);
$user->update($request->all());
$profile = new UserProfile($request->all());
// Also tried:
//$profile = UserProfile::where(['user_id' => $user->id])->first();
$user->profile()->associate($profile);
$user->save();
return response()->json([
'message' => trans('user.updated'),
]);
}
Ошибка
BadMethodCallException in Builder.php line 2161:
Call to undefined method Illuminate\Database\Query\Builder::associate()
пользователя Модель Отношения
/**
* A user has-one profile.
*
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function profile()
{
return $this->hasOne('App\UserProfile');
}
UserProfile Модель отношений
/**
* A user profile belongs to a user.
*
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function user()
{
return $this->belongsTo('App\User');
}
Решение
$user->fill($request->all())->save();
$profile = UserProfile::where('user_id', $user->id)->first();
$profile->fill($request->all());
$user->profile()->save($profile);
Вы должны связать модель экземпляра профиль. –
Не могли бы вы показать функцию profile(), на всякий случай ... – sniels
Привет @sniels, я просто обновил вопрос с помощью отношений модели. – mtpultz