2016-11-07 153 views
1

我有2个表格。驱动程序和part_time_available,当我选择驱动程序类型parttime时,它会显示part_time_available字段。问题是我无法保存。未定义的索引:Laravel

它抛出这个错误:未定义指数: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 

什么想法?

+1

我们也需要您的看法。听起来像是一个普通的数组错误。您的'$ pta'变量中的'start_time'不存在。它没有正确发送请求。 –

+0

@SteveBauman更新查看表单。 –

+1

您是否使用开发工具(特别是网络选项卡)并检查帖子或获取请求以确保索引与请求一起发布?这听起来像laravel在请求期间没有获得索引。 – Birdy

回答

1

我们聊天后,我的propsal,它可能只是从你的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”]是空/空的岗位要求以及可以使用运营商检查isset,如果该值isset然后用它和如果不使用空值,则数据库允许在该特定值上使用空值条目。

给它一个镜头,让我知道,希望它修复了问题,如果没有生病看到帮助尽我所能,林没有专家,虽然:)

我已经更新了这个答案因为你的验证规则?

0

在我的情况下,Laravel抛出了Undefined index:'some_field'异常, ,因为我访问了字段value(some_field)来评估它,但该字段不是由客户端应用程序发送的。

所以在这种情况下,我们必须先使用function isset($response['some_field'])才能访问它。我希望这个答案可以帮助某人。