我想从称为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!');
}
答案 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)