Обновление введенной модели из маршрута в Ларавеле - PullRequest
1 голос
/ 24 сентября 2019

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

это код контроллера

public function update(Request $request, Payment_Student $payment_Student)
{        
   $payment_Student->date =request('date');
   $payment_Student->amount =request('amount');
   $payment_Student->formation_id =request('formation_id');
   $payment_Student->student_id =request('student_id');
   $payment_Student->save();
   return redirect()->route('payment.index');
}

Это мой код маршрута

Route::get('/home', 'HomeController@index')->name('home');
Route::get('/search','CategoryController@search');
Route::resource('/category','CategoryController');
Route::resource('/formation','FormationController');
Route::resource('/professor','ProfessorController');
Route::resource('/student','StudentController');
Route::resource('/classroom','ClassroomController');
Route::resource('/session','SessionController');
Route::resource('/payment','PaymentController');
Route::resource('/seance','SeanceController');
Route::resource('/paymentprof','PaymentProfessorController');
Route::resource('/paymentstudent','PaymentStudentController');
Route::resource('/presence','PresenceController');
Route::resource('/profile','ProfileController');

Это мой код лысого представления

 <form method="POST" enctype="multipart/form-data" action="{{route('paymentstudent.update',$payment_Student->id)}}" class="form-horizontal">
  {{method_field('PATCH')}}
  @csrf
  Date:
   <br/>
  <input class="form-control" type="date" name="date">
  <br/>
  Amount:
  <input  type="number"  value="{{$payment_Student->amount}}"  name="amount" 
  class="form-control">
  <br/>
  Formation:
  <select class="form-control" name="formation_id">
        @foreach($formation as $formation)
    <option value="{{$formation->id}}">{{$formation->name}}</option>
        @endforeach
  </select>
  <br/>
  Student:
  <select class="form-control" name="student_id">
         @foreach($student as $student)
    <option value="{{$student->id}}">{{$student->lastname}}</option>
        @endforeach
  </select>
  <div class="card-footer">
         <button type="submit" class="btn btn-primary">Save Changes</button>
         </div>
  <br>
</form>

, когда я выбираю данные для обновления, они создают новые данные с обновленным значением, которое у меня естьвставлено

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

По умолчанию, когда вы делаете resource, laravel будет сингулярно имя ресурса и делает из него переменную.

Пример: Route::resource('videos', 'VideoController') laravel будет ожидать переменную $video

В вашем случае paymentstudent, вероятно, даст переменную $paymentstudent

К счастью, вы можете настроить собственное имя параметра

Route::resource('paymentstudent', 'PaymentStudentController', ['parameters' => [
    'paymentstudent' => 'payment_Student'
]]);
0 голосов
/ 24 сентября 2019

Получите красноречивую модель из той, которая была передана в маршруте, и обновите соответственно, так как вы используете ресурс маршрута, передайте фактический объект в маршруте по имени параметра

<form method="POST" enctype="multipart/form-data" action="{{ route('paymentstudent.update', ['paymentstudent' => $payment_Student]) }}"
public function update(Payment_Student $payment_Student)
{
    $payment_Student = Payment_Student::find($payment_Student->id);
    $payment_Student->date = request('date');
    $payment_Student->amount = request('amount');
    $payment_Student->formation_id = request('formation_id');
    $payment_Student->student_id = request('student_id');
    $payment_Student->save();
    return redirect()->route('payment.index');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...