2016-11-07 149 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'])才能訪問它。我希望這個答案可以幫助某人。