Как добавить значения в две таблицы, имеющие отношение, используя единую форму?

#php #laravel #laravel-5 #eloquent

#php #laravel #laravel-5 #красноречивый

Вопрос:

Я новичок в Laravel, я хочу добавить данные в две таблицы, используя единую форму. Моя таблица и их отношение

введите описание изображения здесь

Я хочу добавить все поля для пользователя, затем выбрать class_id, а затем section_id через выпадающий список.

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

Поля для таблицы учащихся

 <form method="POST" action="{{url('/storeStudent')}}">
@csrf

<div class="form-group row">
    <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>

    <div class="col-md-6">
        <input id="name" type="text" class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus>

        @if ($errors->has('name'))
            <span class="invalid-feedback" role="alert">
            <strong>{{ $errors->first('name') }}</strong>
        </span>
        @endif
    </div>
</div>

<div class="form-group row">
    <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

    <div class="col-md-6">
        <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>

        @if ($errors->has('email'))
            <span class="invalid-feedback" role="alert">
            <strong>{{ $errors->first('email') }}</strong>
        </span>
        @endif
    </div>
</div>

<div class="form-group row">
    <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

    <div class="col-md-6">
        <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>

        @if ($errors->has('password'))
                <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->first('password') }}</strong>
        </span>
        @endif
    </div>
    </div>


     <input id="role_id" type="hidden" name="role_id" value="2">
  

Поля, начинающиеся с регистрационной таблицы

     <select class="" name="class_id">
         <option value="null">Class</option>
         @foreach($cid as $cc)
             @if($counterr==0)
                 <option selected="selected" value="{{$cc->id}}">{{$cc->title}}</option>
                 {{$counterr  }}
             @else

                 <option value="{{$cc->id}}">{{$cc->title}}</option>
             @endif
        @endforeach
    </select>

     <select section="" name="section_id">
         <option value="null">Section</option>
         @foreach($sec as $sc)
             @if($counterrr==0)
                 <option selected="selected" value="{{$sc->id}}">{{$sc->title}}</option>
                 {{$counterrr  }}
             @else

                 <option value="{{$sc->id}}">{{$sc->title}}</option>
             @endif
         @endforeach
     </select>
   </div>
  </div>
 </form>
  

Контроллер регистрации

 protected function create(array $data)
    {
        return Registration::create([
            'reg_id' => $data['reg_id'],
            'user_id' => $data['user_id'],
            'class_id' => $data['class_id'],
            'section_id' => $data['section_id'],


        ]);
    }

    public function store(Request $request)
    {

        registration::create($request->all());

        return back();
    }
  

Сохранить ученика

     public function storeStudent(Request $request)
{
    $user=new User();
    $user->name=$request->name;
    $user->password=Hash::make($request->password);
    $user->email=$request->email;
    $user->role_id=2;
    $user->parent_id=$request->parent_id;
    $user->save();


    return back();
}
  

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

Я использовал простой метод хранения в контроллере для сохранения данных.

Комментарии:

1. Пожалуйста, вставьте свой метод контроллера.

2. Я обновил контроллер…

Ответ №1:

Это просто .. вы должны создать созданного пользователя и использовать его идентификатор … что-то вроде этого:

Студенческий контроллер:

 public function storeStudent(Request $request)
{
     $created_user = User::create([
         'name' => $request->name,
         'email' => $request->email,
         'password' => bcrypt($request->password),
         'parent_id' => $request->parent_id,
         'role_id' => $request->role_id,
     ]);

     //And after that you need to store user_id in Registration table , so:

     Registration::create([
         'user_id' => $created_user->id,
         'class_id' => $request->class_id,
         'section_id' => $request->section_id,
     ]);

     return redirect()->back();

}
  

надеюсь, это поможет

Комментарии:

1. Я и представить себе не мог, что это так просто.. Спасибо, братан 🙂

Ответ №2:

Пожалуйста, обратитесь к этой ссылке. Вы можете получить некоторые идеи относительно отношений в laravel. https://laravel.com/docs/5.8/eloquent-relationships

Если это не поможет, мне нужно увидеть ваш контроллер и модель. Пожалуйста, вставьте ваш контроллер и код модели.

Комментарии:

1. Я установил связь между ними, у меня возникли проблемы с синтаксисом

2. Возможно, вы получили какую-то ошибку, если ваш синтаксис неверен. Что говорит ошибка? Пожалуйста, напишите ошибку. Также обеспечить миграцию пользователя, регистрацию и модель пользователя, регистрацию

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

4. Сначала вы должны создать пользователя, а затем использовать созданный идентификатор пользователя при регистрации.

5. Если пользователю разрешено регистрироваться только после входа в систему, вы можете использовать auth()-> user()-> id в user_id регистрации