Model :: updateOrCreate фактически обновляет, но не создает, когда запись не существует - PullRequest
0 голосов
/ 07 июня 2018

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

Итак, существуют тесты (вопросы), которые должен выполнять пользователь, и каждый тест имеет опции, аналогичные экзамену.

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

Это мой HTML:

<table class="table table-bordered">
  <thead>
    <tr>
        <th>#</th>
        <th>Contraceptive pill</th>
        <th>UID</th>
        <th>Implant</th>
        <th>Injectable</th>
        <th>Male condom</th>
        <th>Female condom</th>
        <th>Fertility awareness</th>
        <th>Withdrawal</th>
        <th>Sterilization</th>
        <th>Emergency contraceptive</th>
        <th>Actions</th>
    </tr>
 </thead>
 <tbody id="test-inputs">
    @foreach($Test0ptions as $option)      
    <tr>

    <td></td>

    <td>
        <input class="form-control" type="number" name="contraceptive_pills[]" required value="{{ $option->contraceptive_pill }}"> 

   </td>

    <td> 
        <input class="form-control" type="number" name="uids[]" required value="{{ $option->uid}}"> 
    </td>

    <td> 
        <input class="form-control" type="number" name="implants[]" required value="{{ $option->implant}}"> 
    </td>

    <td> 
        <input class="form-control" type="number" name="injectables[]"  required value="{{ $option->injectable}}"> 
    </td >

    <td> 
        <input class="form-control" type="number" name="male_condoms[]"  required value="{{ $option->male_condom}}"> 
    </td>

    <td> 
          <input class="form-control" type="number" name="female_condoms[]" required value="{{ $option->female_condom}}"> 
    </td>

    <td> 
        <input class="form-control" type="number" name="fertility_awareness[]" required value="{{ $option->fertility_awareness}}"> 
    </td>

    <td> 
       <input class="form-control" type="number" name="withdrawals[]" required value="{{ $option->withdrawal}}"> 
    </td>

    <td> 
        <input class="form-control" type="number" name="sterilizations[]" required value="{{ $option->sterilization}}"> 
    </td>

    <td> 
        <input class="form-control" type="number" name="emergency_contraceptives[]" required value="{{ $option->emergency_contraceptive}}"> 
    </td>

   </tr>

  </tbody>
 </table>

<div class="form-group" style="padding-bottom: 10px;">
    <button type="submit" class="btn primary"><i class="fa fa-save"></i> Update</button>
</div>

Это мой скрипт, который добавит новый набор форм:

 populateNewTestForms() {
        $('#test-inputs').append(`
            <tr>

        <td>${this.incrementTableCounter+=1}</td>

        <td><input class="form-control" type="number" name="contraceptive_pills[]" required> </td>

        <td> <input class="form-control" type="number" name="uids[]" required> </td>

        <td> <input class="form-control" type="number" name="implants[]" required> </td>

        <td> <input class="form-control" type="number" name="injectables[]" required> </td>

        <td> <input class="form-control" type="number" name="male_condoms[]" required> </td>

        <td> <input class="form-control" type="number" name="female_condoms[]" required> </td>

        <td> <input class="form-control" type="number" name="fertility_awareness[]" required> </td>

        <td> <input class="form-control" type="number" name="withdrawals[]" required> </td>

        <td> <input class="form-control" type="number" name="sterilizations[]" required> </td>

        <td> <input class="form-control" type="number" name="emergency_contraceptives[]" required> 
        </td>

        <td>

<button type="button" onclick=" $(this).closest('tr').remove(); " class="btn btn-danger" title="delete"><i class="fa fa-trash"></i></button>

        </td>   

    </tr>
        `);

Это мой контроллер:

  foreach ($request->option_ids as $option_id) {

        TestOption::updateOrCreate(['id'   =>  $option_id], [

            'test_id'   =>  $test->id,

            'name'      =>  $request->names[$i],

            'contraceptive_pill'      =>  $request->contraceptive_pills[$i],

            'uid'     =>  $request->uids[$i],

            'implant'     =>  $request->implants[$i],

            'injectable'     =>  $request->injectables[$i],

            'male_condom'     =>  $request->male_condoms[$i],      

            'female_condom'     =>  $request->female_condoms[$i],

            'fertility_awareness'     =>  $request->fertility_awareness[$i],

            'withdrawal'     =>  $request->withdrawals[$i],

            'sterilization'     =>  $request->sterilizations[$i],

            'emergency_contraceptive'     =>  $request->emergency_contraceptives[$i]

            ]);

1 Ответ

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

Ваша функция ищет только option, попробуйте поменять их местами следующим образом.

TestOption::updateOrCreate([
        'test_id'   =>  $test->id
        'name'      =>  $request->names[$i],
        'contraceptive_pill'      =>  $request->contraceptive_pills[$i],
        'uid'     =>  $request->uids[$i],
        'implant'     =>  $request->implants[$i],
        'injectable'     =>  $request->injectables[$i],
        'male_condom'     =>  $request->male_condoms[$i],      
        'female_condom'     =>  $request->female_condoms[$i],
        'fertility_awareness'     =>  $request->fertility_awareness[$i],
        'withdrawal'     =>  $request->withdrawals[$i],
        'sterilization'     =>  $request->sterilizations[$i],
        'emergency_contraceptive'     =>  $request->emergency_contraceptives[$i]

        ],['id'   =>  $option_id]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...