【问题标题】:Can't update data because Call to undefined method Illuminate\Database\Query\Builder::save()无法更新数据,因为调用未定义的方法 Illuminate\Database\Query\Builder::save()
【发布时间】:2019-10-30 20:42:42
【问题描述】:

我想从名为 siswas 和 gurus 的连接表中更新数据,然后它显示错误“调用未定义的方法 Illuminate\Database\Query\Builder::save()”。我的数据库与 mySQL 有关系,不是来自 laravel 模型,所以 guru 模型和 siswa 模型是空白的。这是我的 update() 代码

public function update(Request $request, $id)
    {
        $this->validate($request,[
            'id'=>'required',
            'nama'=> 'required',
            'alamat'=> 'required',
            'tempatLahir'=> 'required',
            'tanggalLahir'=> 'required',
            'namaBapak'=> 'required',
            'namaIbu'=> 'required',
            'noTelp'=> 'required',
            'kelas'=> 'required',

        ]);

        $siswas = DB::table('siswas')
        ->join('gurus','gurus.id','=','siswas.kelas')
        ->select('siswas.id','siswas.nama','gurus.guruKelas','siswas.status'
        ,'siswas.fotoSiswa','siswas.alamat','siswas.noTelp','siswas.tempatLahir'
        ,'siswas.tanggalLahir','siswas.namaBapak','siswas.namaIbu')
        ->where("siswas.id",$id)
        ->limit(1);
        $siswas->id = $request->input('id');
        $siswas->nama = $request->input('nama');
        $siswas->alamat = $request->input('alamat');
        $siswas->tempatLahir = $request->input('tempatLahir');
        $siswas->tanggalLahir = $request->input('tanggalLahir');
        $siswas->namaBapak = $request->input('namaBapak');
        $siswas->namaIbu = $request->input('namaIbu');
        $siswas->noTelp = $request->input('noTelp');
        $siswas->guruKelas = $request->input('kelas');
        $siswas->status = $request->input('status');
        if($request->hasFile('fotoSiswa')){
            //get filename with extension
            $filenameWithExt = $request->file('fotoSiswa')->getClientOriginalName();
            //get just file name
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            //get just ext
            $extension = $request->file('fotoSiswa')->getClientOriginalExtension();
            //filename to store
            $fileNameToStore= $filename.'_'.time().'.'.$extension;
            //upload Image
            $path = $request->file('fotoSiswa')->storeAs('public/fotoSiswa', $fileNameToStore);
            if ($request->hasFile('fotoSiswa')) 
            {
                Storage::delete('public/fotoSiswa/' . $gurus->fotoSiswa);

            }
            $siswas->fotoSiswa = $fileNameToStore;
        }
        $siswas->save();
        return redirect('/siswa')->with('success','Data siswa telah dirubah!');

    }

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    您的代码实际上有多个错误。

    我注意到的第一件事是您的提取查询is never executed。因此,您设置的查询构建器对象的属性根本没有用。您应该在查询中添加->first() 以从数据库中获取第一条记录。

    接下来,您不使用Eloquent。使用 DB::table('') 将返回普通的 PHP 对象。您不能在普通 PHP 对象上调用 ->save()。你必须创建一个更新查询来更新数据库中的这些。

    【讨论】:

    • 谢谢!你很有帮助,我不应该使用 ->save() 而不是 update(['nama' => $request->nama], ...)
    【解决方案2】:

    这会获取您的记录。

    $siswas = DB::table('siswas')
            ->join('gurus','gurus.id','=','siswas.kelas')
            ->select('siswas.id','siswas.nama','gurus.guruKelas','siswas.status'
            ,'siswas.fotoSiswa','siswas.alamat','siswas.noTelp','siswas.tempatLahir'
            ,'siswas.tanggalLahir','siswas.namaBapak','siswas.namaIbu')
            ->where("siswas.id",$id)
            ->limit(1)
            ->first();
    

    不管你想用这个做什么,我不知道。

    $siswas->id = $request->input('id');
            $siswas->nama = $request->input('nama');
            $siswas->alamat = $request->input('alamat');
            $siswas->tempatLahir = $request->input('tempatLahir');
            $siswas->tanggalLahir = $request->input('tanggalLahir');
            $siswas->namaBapak = $request->input('namaBapak');
            $siswas->namaIbu = $request->input('namaIbu');
            $siswas->noTelp = $request->input('noTelp');
            $siswas->guruKelas = $request->input('kelas');
            $siswas->status = $request->input('status');
    

    记住,这是查询生成器,不是很有说服力,所以不需要save()

    要进行更新,您需要执行以下操作:

    $id = $request->input('id');
            $nama = $request->input('nama');
            $alamat = $request->input('alamat');
            $tempatLahir = $request->input('tempatLahir');
            $tanggalLahir = $request->input('tanggalLahir');
            $namaBapak = $request->input('namaBapak');
            $namaIbu = $request->input('namaIbu');
            $noTelp = $request->input('noTelp');
            $guruKelas = $request->input('kelas');
            $status = $request->input('status');
    
    DB::table('siswas')
        ->join('gurus','gurus.id','=','siswas.kelas')
        ->where('id',$id)
        ->update(['name'=>$nama,'alamat'=>$alamat,'tempatLahir '=>$tempatLahir,...]);
    

    我认为您在这里不需要这个 public function update(Request $request, $id) $id 参数,因为您已经从 $id=$request->input(id) 获得它 应该是这样的public function update(Request $request)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2019-09-29
      • 2020-01-04
      • 2018-10-03
      • 1970-01-01
      • 2019-04-02
      相关资源
      最近更新 更多