Как обновить массовую запись по user_id? - PullRequest
0 голосов
/ 07 июня 2018

Laravel, как обновить все записи по user_id.Я хочу обновить все записи по user_id в этой форме.И есть ошибка вроде

Отсутствуют обязательные параметры для [Route: choices.update]

моей базы данных

|----|---------|-------|-----------------|----------|
| id | user_id |  time | question_number | topic_id |
|----|---------|-------|-----------------|----------|
| 1  |    1    | 60:00 |        10       |    1     |
|----|---------|-------|-----------------|----------|
| 2  |    1    | 60:00 |        5        |    2     |
|----|---------|-------|-----------------|----------|
.....................................................
| 10 |    2    | 30:00 |        5        |    1     |
|----|---------|-------|-----------------|----------|
| 11 |    2    | 30:00 |        7        |    2     |
|----|---------|-------|-----------------|----------|

пытается обновить вот так

|----|---------|-------|-----------------|----------|
| id | user_id |  time | question_number | topic_id |
|----|---------|--------|-----------------|----------|
| 1  |    1    | 120:00 |        25       |    1     |
|----|---------|--------|-----------------|----------|
| 2  |    1    | 120:00 |        4        |    2     |
|----|---------|--------|-----------------|----------|
......................................................
| 10 |    2    | 90:00  |       15        |    1     |
|----|---------|--------|-----------------|----------|
| 11 |    2    | 90:00  |       19        |    2     |
|----|---------|----=---|-----------------|----------|

Просмотр

<form method="post" action="{{ route('choices.update') }}">
{{ csrf_field() }}
<table class="table table-bordered table-striped">
        <thead>
        <tr class="info">
        <th>№</th>
        <th>Нэр</th>
        <th>Сэдэв</th>
        <th>Асуултын тоо</th>
        </tr>
        </thead>
        <tbody>
        @foreach($choices as $choice)
        <tr>
        <td>{{ $choice->id }}</td>
        <td>{{ Auth::user()->name }}</td>
        <td>{{ $choice->topic->title }}</td>
        <td><input value="{{ $choice->question_number }}"
                   name="number[{{ $choice->id }}]" step="1" min="0"></td>
        </tr>
        @endforeach
        </tbody>
        </table>
        <a href="#" class="btn btn-primary" type="submit">Хадгалах</a>
</form>

Маршрут

   |        | GET|HEAD  | choices                                   | choices.index                  | App\Http\Controllers\ChoicesController@index                           | web,auth                                     |
   |        | POST      | choices                                   | choices.store                  | App\Http\Controllers\ChoicesController@store                           | web,auth                                     |
   |        | GET|HEAD  | choices/create                            | choices.create                 | App\Http\Controllers\ChoicesController@create                          | web,auth                                     |
   |        | DELETE    | choices/{choice}                          | choices.destroy                | App\Http\Controllers\ChoicesController@destroy                         | web,auth                                     |
   |        | PUT|PATCH | choices/{choice}                          | choices.update                 | App\Http\Controllers\ChoicesController@update                          | web,auth                                     |
   |        | GET|HEAD  | choices/{choice}                          | choices.show                   | App\Http\Controllers\ChoicesController@show                            | web,auth                                     |
   |        | GET|HEAD  | choices/{choice}/edit                     | choices.edit                   | App\Http\Controllers\ChoicesController@edit                             | web,auth                                     |

Контроллер

public function update(Request $request, $id){
    foreach ($request->input('number') as $key => $value) {
        Choice::where('user_id',Auth::id())->update([
            'user_id' => Auth::id(),
            'time'  => $time,
            'topic_id' => $key,
            'question_number' => $value,
        ]);
    }
}

тогда я должен написать что-то, чтобы предоставить мой код.но я не знаю как.

1 Ответ

0 голосов
/ 07 июня 2018

Добавьте $choice->id к маршруту:

{{ route('choices.update', $choice->id) }}

Это должно избавить от Missing required parameters.

Что касается «массового обновления», я бы предложил создатьновый маршрут в качестве текущего маршрута должен использоваться для обновления одного choice например

Route::put('user/choices', ...) //Obviously, you change "put" to be post or patch if you want.

Laravel в настоящее время (насколько я знаю) не поддерживает ON DUPLICATE KEY, однако вы можете использоватьпакет типа this .

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

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