未定义的索引:Laravel

时间:2016-11-07 03:40:47

标签: php laravel

我有两张桌子。 driver和part_time_available,当我选择驱动程序类型parttime时,它将显示part_time_available字段。问题是我无法保存。

它会抛出此错误:未定义的索引:start_time

到目前为止,这是我的保存控制器代码:

public function saveHandler(Request $request, $obj)
{
    try {
        DB::beginTransaction();
            $obj->fill($request->all());
            if (!$obj->save()) {
                throw new ValidationException($obj->errors());
            }
            foreach($request->parttimeAvailabilities as $pta) {
                \Log::info($pta);
                if (empty($pta['id'])) { 
                    $parttimeAvailability = new PartTimeAvailability();
                }
                else {
                    $parttimeAvailability = PartTimeAvailability::find($pta['id']);
                }
                $parttimeAvailability->driver()->associate($obj);
                $pta['driver_id'] = isset($pta['driver_id']);
                $parttimeAvailability->day = $pta['day'];
                $parttimeAvailability->start_time = $pta['start_time'];
                $parttimeAvailability->end_time = $pta['end_time'];
                $parttimeAvailability->available = isset($pta['available']);
                $parttimeAvailability->save();
            };
            $obj->save();
            if (!$parttimeAvailability->save()) {
                throw new ValidationException($parttimeAvailability->errors());
            }
        DB::commit();
        return $this->sendSuccessResponse($request);
    } catch (ValidationException $e) {
        DB::rollback();
        \Log::error($e->errors);
        return $this->sendErrorResponse($request, $e->errors);
    } catch (Exception $e) {
        DB::rollback();
        \Log::error($e->getMessage());
        return $this->sendErrorResponse($request,'Unable to process. Please contact system Administrator');
    }

}

这是我的视图表单代码:

<?php $index = 0; ?>
@foreach($dayOfWeek as $key => $day )
<div class="parttime">
    <div class="row">
        <div class="col-xs-2">
            <div class="form-group">
                {!! Form::text('parttimeAvailabilities['.$index.'][day]',$day, ['class' => 'form-control','disabled'])!!}
                {!! Form::hidden('parttimeAvailabilities['.$index.'][day]',$key, ['class' => 'form-control'])!!}
                {!! Form::hidden('parttimeAvailabilities['.$index.'][id]',null) !!}
            </div>
        </div>
        <div class="col-xs-2">
            <div class="form-group">
                {!! Form::text('parttimeAvailabilities['.$index.'][start_time]', null, ['class' => 'form-control start_time','placeholder' => 'Start time'])!!}
            </div>
        </div>
        <div class="col-xs-2">
            <div class="form-group">
                {!! Form::text('parttimeAvailabilities['.$index.'][end_time]', null, ['class' => 'form-control end_time','placeholder' => 'End time'])!!}
            </div>
        </div>
        <div class="col-xs-2">
            <div class="form-group">
        {!! Form::text('parttimeAvailabilities['.$index.'][hours]', null, ['id' => 'hours','class' => 'form-control', 'readonly'])!!}
            </div>
        </div>
        <div class="col-xs-2 text-center">
            <div class="form-group">
                {!! Form::checkbox('parttimeAvailabilities['.$index.'][available]')!!}
            </div>
        </div>
    </div>
</div>
<?php $index++; ?>
@endforeach

任何想法?

2 个答案:

答案 0 :(得分:2)

我们在这里聊天是我的道具,它可能只是对你的pta ['start_time']数组值稍作修改。

public function saveHandler(Request $request, $obj)
{
    try {
        DB::beginTransaction();
            $obj->fill($request->all());
            if (!$obj->save()) {
                throw new ValidationException($obj->errors());
            }
            foreach($request->parttimeAvailabilities as $pta) {
                \Log::info($pta);
                if (empty($pta['id'])) { 
                    $parttimeAvailability = new PartTimeAvailability();
                }
                else {
                    $parttimeAvailability = PartTimeAvailability::find($pta['id']);
                }
                $parttimeAvailability->driver()->associate($obj);
                $pta['driver_id'] = isset($pta['driver_id']);
                $parttimeAvailability->day = $pta['day'];
                $parttimeAvailability->start_time = isset($pta['start_time']) ? $pta['start_time'] : '00:00:00';
                $parttimeAvailability->end_time = $pta['end_time'];
                $parttimeAvailability->available = isset($pta['available']);
                $parttimeAvailability->save();
            };
            $obj->save();
            if (!$parttimeAvailability->save()) {
                throw new ValidationException($parttimeAvailability->errors());
            }
        DB::commit();
        return $this->sendSuccessResponse($request);
    } catch (ValidationException $e) {
        DB::rollback();
        \Log::error($e->errors);
        return $this->sendErrorResponse($request, $e->errors);
    } catch (Exception $e) {
        DB::rollback();
        \Log::error($e->getMessage());
        return $this->sendErrorResponse($request,'Unable to process. Please contact system Administrator');
    }

}

你说你认为问题是你的$ pta ['start_time']在帖子请求上为空/ null你可以使用运算符来检查是否isset以及值是否设置然后使用它然后如果不使用空白值,因为您的数据库允许对该特定值进行可为空的条目。

试一试,让我知道,希望它能解决问题,如果没有看到帮助我能做到最好的事情,我不是专家:)

由于您的验证规则,我已更新此答案?

答案 1 :(得分:0)

就我而言,Laravel抛出value(some_field)例外, 因为我访问了字段function isset($response['some_field'])来评估它,但该字段不是由客户端应用程序发送的。

所以在这种情况下,我们必须在访问之前使用{{1}}。我希望这个答案可以帮助别人。