【问题标题】:Call to a member function update() on null LARAVEL在 null LARAVEL 上调用成员函数 update()
【发布时间】:2018-01-07 16:25:00
【问题描述】:

我尝试更新特定项目,但出现错误“在 null 上调用成员函数 update()”。 我之前尝试用 ->insert($data) 更改 ->update($data) 并且它可以工作。

控制器:

public function update(Request $request, $id)
    {
        $this -> validate($request, array(
            'gamename' => 'required|min:3',
            'price' => 'required|int|min:1',
            'genre' => 'required',
            'releaseddate' => 'required|date',
            'picture' => 'required|mimes:jpeg,jpg,png,gif'
        ));


        $gamename = $request->input('gamename');
        $genre = $request->input('genre');
        $price = $request->input('price');
        $releaseddate = Carbon::parse($request->input('releaseddate'));
        $picture = $request->file('picture')->getClientOriginalName();

        $data=array('gamename' => $gamename, 'genre'=>$genre, 'price'=>$price,'releaseddate'=>$releaseddate,'picture'=>$picture );

        DB::table('games')->join('genres', 'games.genreid', '=', 'genres.genreid')->find($id)->update($data);

        return redirect('managegame');
    }

查看:

<form action="/update/{id}" method="post" id="registerform" enctype="multipart/form-data">
<div class="errorpop{{ $errors->has('genre') ? ' has-error' : '' }}">
            <label for="genre" class="">Genre</label>

            <div class="">
                @foreach($genres as $genre)
                    <option value="{{ $genre->genreid }}">{{ $genre->genre }}</option>
                @endforeach
                @if ($errors->has('genre'))
                    <span class="help-block">
                                        <strong>{{ $errors->first('genre') }}</strong>
                                    </span>
                @endif
            </div>
        </div>

【问题讨论】:

  • 获取我点击编辑的游戏ID ||我得到了与我使用 {{ $id = $_SESSION['id'] }} @AlexeyMezenin 相同的结果
  • 那么,这给了你一个对象然后dd(DB::table('games')-&gt;find($id))?而不是null?如果是,请执行此操作DB::table('games')-&gt;where('id', $id)-&gt;update($data);
  • 是的,这不是null,我已经尝试过您的答案。它没有显示任何错误,但它只是刷新编辑页面(它应该是重定向:视图)而不更新数据
  • 听起来像验证重定向回来,尝试删除验证。游戏会更新吗?
  • DB::table('games')->where('id',$id)->update($data);应该可以工作,对我来说工作正常,刚刚测试过

标签: php mysql database laravel


【解决方案1】:

{id} 不是一个值。您必须具有 {id} 的值。 示例:action="/update/1"

<form action="/update/1" method="post" id="registerform" enctype="multipart/form-data">
<div class="errorpop{{ $errors->has('genre') ? ' has-error' : '' }}">
            <label for="genre" class="">Genre</label>

            <div class="">
                @foreach($genres as $genre)
                    <option value="{{ $genre->genreid }}">{{ $genre->genre }}</option>
                @endforeach
                @if ($errors->has('genre'))
                    <span class="help-block">
                                        <strong>{{ $errors->first('genre') }}</strong>
                                    </span>
                @endif
            </div>
        </div>

然后更新你使用方法where('id', $id)替换find($id)

DB::table('games')->join('genres', 'games.genreid', '=', 'genres.genreid')->where('id', $id)->update($data);

https://laravel.com/docs/5.5/queries#updates

【讨论】:

    【解决方案2】:

    确保你得到了对象

    $game = DB::table('games')->
    join('genres', 'games.genreid', '=', 'genres.genreid')->where('id',$id)->get();
    

    //确保你有想要的对象。然后

      $game->update($data);
    

    【讨论】:

    • 我试过你的答案。它没有显示任何错误,但它只是刷新编辑页面(它应该是重定向:视图)而不更新数据
    【解决方案3】:

    我不确定这条线是否能如你所愿

    DB::table('games')-&gt;join('genres', 'games.genreid', '=', 'genres.genreid')-&gt;find($id)-&gt;update($data);

    你想更新什么? gamesgenres ?您不能像那样一次更新 2 个表。您需要找到games 行来更新、更新该行以及连接的表行并更新该行,不能一次完成所有操作。

    但是您尝试从一个简单的表格更新 2 个表格,以相同的方法表明您的表格布局不正确?

    【讨论】:

      【解决方案4】:

      id)->update($data);

          return redirect('managegame');
      }
      

      查看:

      有('流派')? '有错误' : '' }}"> 类型
              <div class="">
                  @foreach($genres as $genre)
                      <option value="{{ $genre->genreid }}">{{ $genre->genre }}</option>
                  @endforeach
                  @if ($errors->has('genre'))
                      <span class="help-block">
                                          <strong>{{ $errors->first('genre') }}</strong>
                                      </span>
                  @endif
              </div>
          </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        • 2021-08-07
        • 1970-01-01
        • 2016-09-04
        • 2016-06-29
        • 2018-04-03
        • 2021-10-06
        相关资源
        最近更新 更多