Не удается обновить данные, так как вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: save () - PullRequest
0 голосов
/ 17 июня 2019

Я хочу обновить данные из объединенной таблицы с именем siswas и gurus, после чего выдается сообщение об ошибке «Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: save ()».Моя база данных имеет отношение к mySQL не из модели laravel, поэтому модель гуру и модель siswa пустые.Это мой код обновления ()

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 ]

4 голосов
/ 17 июня 2019

Ваш код на самом деле имеет несколько ошибок.

Первое, что я заметил, это то, что ваш запрос на выборку никогда не выполняется .Таким образом, вы устанавливаете свойства объекта построителя запросов с помощью.Вы должны добавить ->first() к вашему запросу, чтобы получить первую запись из базы данных.

Далее, вы не используете Eloquent .использование DB::table('') вернет простые объекты PHP.Вы не можете вызвать ->save() для простого объекта PHP.Вы должны создать запрос на обновление, чтобы обновить их в базе данных.

0 голосов
/ 17 июня 2019

это выбирает вашу запись.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...