2016-08-01 103 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