Laravel - обновить только выбранные данные - PullRequest
0 голосов
/ 24 января 2019

У меня есть таблица, и внутри таблицы, у меня есть текстовое поле, посмотрите на страницу.

enter image description here

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

вот мой контроллер

 public function updateSchedule(Request $request, $id)
{
    $timein = $request->input('timeIn');
    $timeout = $request->input('timeOut');

    DB::table('schedules')
        ->update(['time_in' => $timein, 'time_out' => $timeout]);

    $notification = array(
        'message' => 'Employee Time Updated!',
        'alert-type' => 'success'
    );
    return redirect()->back()->with($notification, 'Employee Time Updated!');

}

и вот мое мнение

    {!! Form::open(['action' => ['Admin\EmployeeFilemController@updateSchedule', $employee->id], 'method' => 'POST']) !!}

        <div class="row">
            <div class="form-group col-md-12">

                <small>Employee No. and Name: </small><b><i> {{ $employee->employee_no }} : {{ $employee->last_name }}, {{ $employee->first_name }}</i></b>

                <input type="hidden" name="hidEmployeeno" value='<?php echo $employee->employee_no ?>'>
                <input type="hidden" name="hidEmployeeLast" value='<?php echo $employee->last_name ?>'>
                <input type="hidden" name="hidEmployeeFirst" value='<?php echo $employee->first_name ?>'>
                <hr>

            </div>

    </div>

        <table class="table">
            <thead>
              <tr>
                <th>DATE</th>
                <th>TIME IN</th>
                <th>LUNCH</th>
                <th>TIME OUT</th>
                <th>TOTAL HOURS</th>
                <th>STATUS</th>

              </tr>
            </thead>
            <tbody>

                    @foreach ($employeeSched as $setTime)
              <tr>

                 <td> {{Form::label('date_today', $setTime->date_today,['class'=>'form-control'])}}</td>
                 <td><input type="time" name="timeIn" class="form-control col-md-10" value='{{ $setTime->time_in }}'></td>
                 <td><p>12:00 PM - 1:00 PM</p></td>
                 <td><input type="time" name="timeOut" class="form-control col-md-10" value='{{ $setTime->time_out }}'></td>
                 <td>@php
                    $time1 = strtotime($setTime->time_in);
                    $time2 = strtotime($setTime->time_out);
                    $difference = round(abs($time2 - $time1) / 3600,2);
                    $total = $difference - 1;
                    echo '<b>' . $total . '</b>';
                 @endphp</td>


                <td>
                    @php
                    if ($total < 8) {
                        echo '<b>Late</b>';
                    } else if($total > 8) {
                        echo '<b>OT</b>';
                    } elseif ($total < 8.5 && $total == 8) {
                        echo '<b>In</b>';
                    }


                    @endphp
                </td>
              </tr>
              @endforeach



            </tbody>
    </table>
    {{Form::button('<i class="fa fa-clock">&nbsp;&nbsp;UPDATE TIME</i>',['type' => 'submit','class' => 'btn btn-info btn-sm',  'style'=>"display: inline-block;"])}}
    {{Form::hidden('_method', 'PUT')}}

    {!! Form::close() !!}

спасибо, пожалуйста, помогите мне, пожалуйста, спасибо

Ответы [ 5 ]

0 голосов
/ 24 января 2019

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

Клинок (только необходимая часть)

<td><input type="time" name="schedules[{{ $setTime->id }}][timeIn]" class="form-control col-md-10" value='{{ $setTime->time_in }}'></td>
<td><input type="time" name="schedules[{{ $setTime->id }}][timeOut]" class="form-control col-md-10" value='{{ $setTime->time_out }}'></td>

Примечание : я предположил, $setTime->id - это идентификатор расписания

Контроллер

public function updateSchedule(Request $request, $id)
{
    $schedules = $request->get('schedules');

    foreach ($schedules as $id => $schedule) {
        DB::table('schedules')
            ->where('id', $id)
            ->update([
                'time_in'  => $schedule['timeIn'], 
                'time_out' => $schedule['timeOut']
            ]);
    }

    $notification = array(
        'message' => 'Employee Time Updated!',
        'alert-type' => 'success'
    );

    return redirect()->back()->with($notification, 'Employee Time Updated!');
}

Примечание : Эта реализация будет касаться времени DB n (число записей расписания), даже если все записи не изменены.

Совет : Вы можете передать старые значения вместе с изменяемыми, чтобы сравнить, если они действительно изменены, и выполнить запрос на обновление только тех, которые были изменены.

0 голосов
/ 24 января 2019

Вы не сказали своей БД, какую строку вы хотите обновить.Когда вы пишете свой запрос, таблица «update» устанавливает «col_name» = «value»;Но вы должны сказать ему, какой идентификатор вы хотите обновить.Как 'где' ID '= 12.Надеюсь, вы понимаете.:)

 public function updateSchedule(Request $request, $id){
  $timein = $request->input('timeIn');
  $timeout = $request->input('timeOut');
  DB::table('schedules')->where('id', $id)->update(['time_in' => $timein, 'time_out'=> $timeout]);
  $notification = array(
    'message' => 'Employee Time Updated!',
    'alert-type' => 'success'
);
return redirect()->back()->with($notification, 'Employee Time Updated!');
}
0 голосов
/ 24 января 2019

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

  DB::table('schedules')->where('id', $id)
        ->update(['time_in' => $timein, 'time_out' => $timeout]);

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

DB::beginTransaction();
try {
  DB::table('schedules')->where('id', $id)
        ->update(['time_in' => $timein, 'time_out' => $timeout]);

    DB::commit();

} catch (\Exception $e) {
    DB::rollback();
    print_r($e);die;

}
0 голосов
/ 24 января 2019

Вы также можете попробовать таким образом.

DB::update('update schedules set time_in = "'.$timein.'", time_out = "'.$timeout.'" where id = "'.$id.'");
0 голосов
/ 24 января 2019

Вам необходимо добавить $ id в ваш запрос, поэтому он обновляет всю вашу строку:

DB::table('schedules')->where('id', $id)->update(['time_in' => $timein, 'time_out' => $timeout]);

Кроме того, вместо построителя запросов я предлагаю использовать Eloquent.

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