【问题标题】:Laravel fill returns nullLaravel 填充返回 null
【发布时间】:2016-08-02 16:05:56
【问题描述】:

我想在laravel中更新一个产品,但是不能正常工作,

我的 Controller 的更新方法是这样的:

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

我尝试更新后收到以下错误,错误如下:

在 null 上调用成员函数 fill()

它指向这一行:

$findLangId->fill($langData);

感谢您的帮助,谢谢。

编辑

好吧,人们说$intProductRomID 为空,但如果我 dd($intProductRomID),我会得到正确的产品 ID。

【问题讨论】:

  • 可以肯定 $findLangId 为空,因为关于它的行没有返回任何结果。
  • @Josh Rumbut 但是如果我返回 $languages 和 $intProductRomID 我会得到一些结果,你能告诉我你将如何解决这个问题
  • 标题不正确!您正尝试在Null 上致电fill(),就像null->fill()
  • @zorx 我的编辑不好

标签: php database laravel model-view-controller


【解决方案1】:

根据 cmets,以下行是 return null:

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

意思是这无效:

$findLangId->fill($langData);

换句话说,如果你将 var_dump 出$languages->all(),你将不会在其中找到$intProductRomID。如果您不确定,请将->find 替换为->findOrFail()(考虑到您没有进行任何错误捕获或检查,您可能应该改用它)。

编辑

在 cmets 中进行了一些对话后,确定使用了错误的字段作为参考。请改用where

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

【讨论】:

  • 但是他为什么找不到呢?
  • 很可能是因为它不存在,但如果不查看数据就无法判断。打印出 $intProductRomID 以确保其正确
  • 我刚刚看到您的编辑 - $intProductRomID 为空。这就是为什么...
  • 不,如果我 dd($intProductRomID) 我得到当前 id,它不为空
  • OK 数据集中当前id 100%?您是否为数据库使用默认键“id”?你能用 $languages->all() 转储你的数据吗
猜你喜欢
  • 2014-11-02
  • 2020-11-24
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 2020-11-11
  • 1970-01-01
相关资源
最近更新 更多