由于调用未定义的方法Illuminate \ Database \ Query \ Builder :: save(),因此无法更新数据

时间:2019-06-17 09:11:05

标签: php laravel laravel-5 eloquent

我想从称为siswas和gurus的联接表中更新数据,然后显示错误“调用未定义的方法Illuminate \ Database \ Query \ Builder :: save()”。我的数据库不是在laravel模型上,而是在mySQL上具有关系,因此大师模型和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!');

    }

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

这会获取您的记录。

$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)