Jestem początkującym w Lavelu. Aktualizowałem rekordy, ale nie mogę zrozumieć, co jest nie tak z moim {x0}} Mój kod kontrolera jest następujący

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Student;
use PHPUnit\Framework\MockObject\Builder\Stub;

class HomeController extends Controller
{
    public function read() {
        $students = Student::all();
        return view('read',['Students'=>$students]);
    }

    public function insert() {
        return view('insert');
    }

    public function insertPost(Request $req) {
        $student=new Student();
        $student->Name = $req->input('name');
        $student->Marks = $req->input('marks');
        $student->save();
        return redirect('/');
    }

    public function update($id) {
        $student = Student::find($id);
        return view('update',['Student'=>$student]);
    }

    public function delete($id) {
        $student = Student::find($id);
        $student->delete();
    }

    public function updatePost(Request $req) {
        $student = Student::find($req->input('id'));
        $student->Name=$req->input('name');
        $student->Marks=$req->input('marks');
        $student->save();


         
        // Student::where('ID',$req->input('id'))
        //         ->update(['Name'=>$req->input('name'),
        //                   'Marks'=>$req->input('marks')]);
        return redirect('/');
    }
}

Główny główny w updatePost(); powoduje aktualizację zapisów

$student = Student::find($req->input('id'));
            $student->Name=$req->input('name');
            $student->Marks=$req->input('marks');
            $student->save();

Zmieniłem sposób aktualizacji rekordów

Student::where('ID',$req->input('id'))
                ->update(['Name'=>$req->input('name'),
                          'Marks'=>$req->input('marks')]);

I działało. Ale chciałem wiedzieć, z jaką częścią popełniłem błąd.

1
Ghazanfar Ateeb 17 kwiecień 2021, 10:14

3 odpowiedzi

Najlepsza odpowiedź

Musisz ustawić podstawowy klucz do "ID" Domyślnie głównym kluczem lub nazwy PK to "ID", ale w kodzie zmieniono na "ID", więc musisz przejść do klasy użytkownika użytkownika.php i dodać tę linię

    public $primaryKey = 'ID';

1
Mohammad Akbari 17 kwiecień 2021, 07:28
$updates = ([
              'Name' => $req->name,
              'Marks' => $req->marks
           ]);
$student = Node::find($request->id)->update($updates);
if($student){
//succeed case
}
else{
//not succeed
}
0
The Kayi's Kitchen 17 kwiecień 2021, 07:48

Jedną z rzeczy, które możesz spróbować używać metody Lavel's {X0}}. update będzie obsługiwać oszczędzanie wewnętrznie.

$student = Student::findOrFail($req->input('id')));

$student->update([
    'Name' => $req->input('name'),
    'Marks' => $req->input('marks'),
]);
0
Ghazanfar Ateeb 17 kwiecień 2021, 07:38