Как показать и отредактировать один и тот же клинок в Laravel? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть пользователь и таблица профиля , а user_id - это внешний ключ в таблице profile и oneto one отношения. Сейчас я пытаюсь отобразить данные пользователя и профиля в текстовом поле на блейде profile . Кроме того, я хочу сохранить данные редактирования в том же текстовом поле, нажав кнопку сохранить изменение . Я могу показать данные таблицы пользователя, используя value="{{Auth::user()->mobile}}", но запутался, чтобы показать данные профиля и способы редактирования данных пользователя и профиля. Как я могу редактировать все данные?

Лезвие профиля

<div class="tab-pane active" id="tab_1_1">
<form role="form"  method="POST">
    {{ csrf_field() }}

    <div class="form-group">

        <label class="control-label">Full Name</label>
        <input type="text" value="{{Auth::user()->name}}" name="name"  class="form-control">
    </div>

    <div class="form-group">
        <label class="control-label">Email</label>
        <input type="text" value="{{Auth::user()->email}}"  name="email" class="form-control"> </div>
        <div class="form-group">
            <label class="control-label">Mobile Number</label>
            <input type="text" value="{{Auth::user()->mobile}}" name="mobile" class="form-control">
        </div>


        <div class="form-group">
            <label class="control-label">Organization</label>
            <input type="text" value=""  name="organization" class="form-control">
        </div>
        <div class="form-group">
            <label class="control-label">Department</label>
            <input type="text" value="" name="department" class="form-control">
        </div>
        <div class="form-group">
            <label class="control-label">Designation</label>
            <input type="text" value="" name="designation" class="form-control">
        </div>
        <div class="form-group">
            <label class="control-label">Address</label>
            <textarea  class="form-control" rows="3" name="address" value=""></textarea>
        </div>

        <div class="margiv-top-10">
            @if (Auth::user()->id)
            <!-- <button type="submit" class="btn btn-primary">Edit</button> -->
            <a href="{{route('profileDataUpdate')}}" class="btn default"> Save </a>
            @endif
            <a href="javascript:;" class="btn default"> Cancel </a>
        </div>
    </form>
</div>

Контроллер

public function profileDataUpdate(Request $request)
{
    $this->validate($request,[

        'user_id'=> '',
        'organization' => '',
        'department' => '',
        'designation' => '',
        'address' => '',

        ]);

        $users = new User();

        $users->name = $request->name;
        $users->email = $request->email;            
        $users->mobile = $request->mobile;

        $users->save();

        $profiles = new Profile();

        dd($profiles->user_id = $request->user_id);

        $profiles->organization = $request->organization;
        $profiles->department = $request->department;
        $profiles->designation = $request->designation;
        $profiles->address = $request->address;

        $profiles->save();

    return redirect(route('profile'))->with('successMsg','profile Successfully Updated');
}

1 Ответ

0 голосов
/ 05 сентября 2018

Во-первых, вам нужно получить информацию о пользователе в контроллере, чтобы вы легко отображали связанную информацию в вашей пользовательской модели

модель пользователя

public function profile(){
  return $this->hasOne(Profile::class,"user_id","id");
}

в вашем контроллере (мы собираем информацию о пользователе)

public function showProfile(){
    $id = Auth::id();
    $user = User::with("profile")->find($id);
    return view("profile",compact("user"));
}

view (так что, по вашему мнению, мы можем получить информацию о профиле с помощью переменной $ user)

name: {{$user->name}}
organization: {{$user->profile->organization}}

И обновление .. Вы не обновляете в своем контроллере, вы пытаетесь создать нового пользователя и профиль.

Я предполагаю, что информация профиля вначале не существует, поэтому нам нужно использовать метод updateOrCreate

public function profileDataUpdate(Request $request)
{
    // validation stuff here

    User::where("id", $request->user_id)
        ->update([
        "name" => $request->name,
        "email" => $request->email,            
        "mobile" => $request->mobile
        ]);

    Profile::updateOrCreate(["user_id" => $request->user_id],[
    "organization" => $request->organization,
    "department" => $request->department,
    "designation" => $request->designation,
    "address" => $request->address,         
    ]);


return redirect(route('profile'))->with('successMsg','profile Successfully Updated');

}

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