2016-08-01 98 views
0

我想更新laravel的產物,但它不能正常工作,Laravel填寫返回null

我控制器的update方法是這樣的:

public function updateProduct(Request $request) 
{ 
    # Get input values 
    $data = $request->all(); 
    $productID = $data['id']; 
    $product = Product::find($productID); 

    $product->fill($data); 
    # Validate input 
    $validator = Validator::make($request->all(), Product::$rules); 

    if ($product->save()) 
    { 
     # save language selection 
     $lsCounter = 0; 
     $langSelecName = $request->input('language'); 
     $langSelecFile = $request->file('language'); 

     if ($langSelecName) 
     { 
      $projectPath = $dProjectPath . "languages"; 

      foreach ($langSelecName as $langSelecNameKey => $langSelecNameValue) 
      { 
       if ($langSelecFile[$lsCounter]['input_vid_lang'] != null) 
       { 
        $langVidFileName = $langSelecFile[$lsCounter]['input_vid_lang']->getClientOriginalName(); 

        $languages = new Language(); 
        $languages['short_name'] = $langSelecNameValue; 
        $languages['input_video'] = $projectLangPath . '\\' . $langVidFileName; 

        $languages->product()->associate($product); 

        $langData = [ 
         'languagesShortName' => $languages['short_name'], 
         'languagesInputVideo' => $languages['input_video'] 
        ]; 

        $intProductID = intval($productID); 
        $findLangId = $languages->find($intProductID); 

        $findLangId->fill($langData); 

        if ($languages->save()) 
        { 
         $langSelecFile[$lsCounter]['input_vid_lang']->move($projectLangPath, $langVidFileName); 
        } 
       } 

       $lsCounter++; 
      } 
     } 

    } else { 
     return redirect()->route('editProduct', $productID)->with('message', 'Error')->withInput(); 
    } 

我碰到下面的錯誤後,我嘗試更新它,錯誤是這樣的:

調用一個成員函數填充()上的空

並將其指向這一行:

$findLangId->fill($langData); 

我很欣賞一些幫助,謝謝。

編輯

好的人說,$intProductRomID爲空,但我得到了正確的產品ID,如果我的DD($ intProductRomID)。

+1

可以肯定的是,$ findLangId爲null,因爲關於它的行沒有返回結果。 –

+0

@Josh Rumbut但如果我返回$ languages和$ intProductRomID,我會得到一些結果,你能告訴我你將如何解決這個問題 – utdev

+1

標題不正確!你試圖在'Null'上調用'fill()'就像這樣'null-> fill()' – zorx

回答

2

按照意見,下面一行是返回null

$findLangId = $languages->find($intProductRomID); 

意義,這將是無效的:

$findLangId->fill($langData); 

換句話說,如果你要的var_dump出$languages->all(),你不會在那裏找到$intProductRomID。如果您不確定,請將->find替換爲->findOrFail()(考慮到您沒有執行任何錯誤捕獲或檢查,您可能應該使用它)。

編輯

在評論一番交談後,已確定這是被用於參考了錯誤的領域。改爲使用where

$languages->where('product_rom_id', $intProductRomID); 
+0

但是他爲什麼找不到它? – utdev

+0

最有可能是因爲它不存在,但沒有看到數據就無法分辨。打印出$ intProductRomID以確保其正確 – Chris

+0

我剛剛看到您的編輯 - $ intProductRomID爲空。這就是爲什麼...... – Chris