Создание объекта по умолчанию из пустого значения laravel 5.7

Создание объекта по умолчанию из пустого значения laravel 5.7

27.02.2019 07:19:14 Просмотров 49 Источник

У меня есть ошибка в моей форме администратора пользователя обновления, где я хочу обновить профиль, соответствующий Пользователю, если у него есть профиль. Но он выдает эту ошибку:

Создание объекта по умолчанию из пустого значения

Я установил отношения в своей модели между Пользователем и профилем Profile::where('id', $user->profile_id)->first();но когда я dd, это всегда null, даже если есть соответствующий профиль.

Пользователь.РНР

public function profile()

{

    return $this->hasOne('App\Profile', 'user_id', 'id');

}

Профиль.РНР

public function user()

{
    return $this->belongsTo('App\User');

}

ошибка функции в

public function update(Request $request, User $user)
{
    if(\Auth::check()) {

        if(\Auth::user()->type == 'admin') {

            $validated = $request->validate([

                'name' => 'required',

                'email' => 'required|email',

                'password' => 'confirmed'
            ]);

            if(!empty($validated['password'])){

                if(!$user->profile){
                    //Has no profile
                    $user->name             = $validated['name'];
                    $user->email            = $validated['email'];
                    $user->password         = bcrypt($validated['password']);
                    $user->update();
                } else {
                    //Has profile
                    $profile                = Profile::where('id', $user->profile_id)->first();
                    $profile->username      = $validated['name'];
                    $profile->email         = $validated['email'];
                    $profile->update();

                    $user->name             = $validated['name'];
                    $user->email            = $validated['email'];
                    $user->password         = bcrypt($validated['password']);
                    $user->update();
                }

            } else {

                if(!$user->profile){
                    //Has no profile
                    $user->name             = $validated['name'];
                    $user->email            = $validated['email'];
                    $user->update();
                } else {
                    //Has profile
                    $profile                = Profile::where('id', $user->profile_id)->first();
                    $profile->username      = $validated['name'];
                    $profile->email         = $validated['email'];
                    $profile->update();

                    $user->name             = $validated['name'];
                    $user->email            = $validated['email'];
                    $user->update();
                }
            }
        }
    }
}

на этих линиях $profile = Profile::where('id', $user->profile_id)->first();

У вопроса есть решение - Посмотреть?

Ответы - Создание объекта по умолчанию из пустого значения laravel 5.7 / Creating default object from empty value laravel 5.7

Является ответом!
piscator

27.02.2019 07:24:05

Поскольку вы используете user_idв качестве внешнего ключа в таблице profiles, вы ожидаете, что это будет вашим заявлением:

Profile::where('user_id', $user->id)->first();

Или, используя отношение:

$user->profile;
Mihir Bhende

27.02.2019 07:38:11

Вы можете просто использовать свое отношение, а также сжимать логику как :

$user->name             = $validated['name'];
$user->email            = $validated['email'];

if(!empty($validated['password'])){

    $user->password   = bcrypt($validated['password']);

    $profile  = $user->profile;
    $profile->username      = $validated['name'];
    $profile->email         = $validated['email'];
    $profile->save();
}
$user->save();
Закрыть X