php - 未定义索引 : Laravel

标签 php laravel

我有 2 张 table 。司机和 part_time_available,当我选择兼职司机类型时,它会显示 part_time_available 字段。问题是我无法保存。

它抛出这个错误:Undefined index: start_time

到目前为止,这是我的保存 Controller 代码:

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');
    }

}

这是我的 View 表单代码:

<?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

有什么想法吗?

最佳答案

在我们的聊天之后是我的建议,它可能只需要稍微改变你的 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'] 在 post 请求中为空/null 您可以使用运算符检查是否设置了值,如果设置了值则使用它,如果不使用则使用空白值,因为您的数据库允许该特定值的可为 null 的条目。

试一试,让我知道,希望它能解决问题,如果不是我会尽我所能,虽然我不是专家 :)

我已经根据您的验证规则更新了这个答案?

关于php - 未定义索引 : Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40457494/

相关文章:

php - 在单引号和双引号内捕获 __ ('<string>' )

javascript - 使用 jQuery 打破属性

php - Laravel 5.1 类 Illuminate\Database\Eloquent\Relations\HasMany 的对象无法转换为字符串

laravel - Laravel 5 中未定义的函数 link_to

php - 使用 PHP 和 SESSION 的登录页面

php - 如何返回数组中的最小键?

php - 如何进行正确的时间计算?

php - 将数据从集合回显到 Blade View

php - 使用基于 Active Record 的框架进行单元测试

php - Laravel - 归档数据,删除和插入到另一个表