首页 > 解决方案 > PHP Laravel save() 没有更新记录

问题描述

我是laravel的初学者。我正在更新记录,但我无法弄清楚$student->save(); 我的控制器代码有什么问题,如下所示

<?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('/');
    }
}

主要updatePost();导致记录不更新

$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')]);

它奏效了。但我想知道我在哪个部分犯了错误。

标签: phplaravel

解决方案


您需要将主键设置为 'ID' 默认情况下,主键或 PK 名称是 'id' 但在你的代码中它更改为 'ID' 所以你需要去你的 User.php 模型类并添加这一行

    public $primaryKey = 'ID';


推荐阅读