Создание объекта по умолчанию из пустого значения laravel 5.7 - PullRequest
0 голосов
/ 27 февраля 2019

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

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

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

User.php

public function profile()

{

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

}

Profile.php

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();

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

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

$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();
0 голосов
/ 27 февраля 2019

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

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

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

$ user-> profile;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...