Пользователь :: где (user-> идентификатор == $ Profile-> идентификатор);получить профиль, равный пользователю в контроллере - PullRequest
0 голосов
/ 26 февраля 2019

Если вы установите отношения между User.php return $this->belongsTo('App\User'); и Profile.php return $this->hasOne('App\Profile', 'user_id', 'id');, как вы можете получить соответствующего пользователя в профиле, когда вы получаете только переменные профиля.public function update(Request $request, Profile $profile)

Я думал о чем-то вроде этого User::where(user->id==$profile->id);, но это не работает, как бы вы могли это сделать?

Функция шахты:

if(\Auth::check()) {

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

            $validated = $request->validate([

                'username' => 'required',

                'email' => 'required|email',

                'firstname' => 'required',

                'lastname' => 'required',

                'age' => 'required|numeric|max:150',

                'birthdate' => 'required|numeric',

                'bio' => 'required|min:30',

                'select_file'  => 'image|mimes:jpg,png,gif,jpeg|max:2048'

            ]);

            $image = $request->file('select_file');
            $new_name = rand() . '.' . $image->getClientOriginalExtension();
            $image->move(public_path('images'), $new_name);

            $profile->username      = $validated['username'];
            $profile->email         = $validated['email'];
            $profile->firstname     = $validated['firstname'];
            $profile->lastname      = $validated['lastname'];
            $profile->age           = $validated['age'];
            $profile->birthdate     = $validated['birthdate'];
            $profile->bio           = $validated['bio'];
            $profile->image_path    = $new_name;
            $profile->update();

            $user                   = User::where(user->id==$profile->id);
            $user->name             = $validated['username'];
            $user->email            = $validated['email'];
            $user->update();

            return redirect()
                ->route('admin')
                ->with('succes', 'Profile updated succesfully');
        } else {

            return redirect()
                ->route('admin')
                ->with('fail', 'Profile is unable to be update successfully');
        }
    } else {

        return redirect()
            ->route('login')
            ->with('fail', 'Profile is unable to be update successfully 
    because ur not an Admin');
    }

Ответы [ 2 ]

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

Вы можете сделать это несколькими способами.

Решение 1:

User::whereId($profile->user_id)->first();

Решение 2:

User::where('id', $profile->user_id)->first();

Решение 3:

User::where('id','=', $profile->user_id)->first();

Решение 4:

User::where(['id' => $profile->user_id])->first();

Также вы можете это сделать. В модели профиля определите

public function user()
{
    return $this->belongsTo('App\User');
} 

Чем вы можете лениво загрузить

$user = $profile->load('user')->user; // but it is lazy loading
0 голосов
/ 26 февраля 2019

Ваше где не отформатировано должным образом.Вам нужно передать 2 (или 3) параметра, где первый столбец, а второй - значение, которое вы проверяете.Если используется 3 параметра, вторым будет оператор (= или !=).Не забудьте first() (для одной записи) или get() (для коллекции записей), чтобы запрос действительно выполнялся.В противном случае это будет просто объект QueryBuilder.

User::where('id', $profile->user_id)->first();

или

User::where('id','=', $profile->user_id)->first();

Поскольку вы проверяете идентификатор пользователя, вы также можете использовать find(), чтобы получить одну запись:

User::find($profile->user_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...