【问题标题】:PHP Laravel save() is not updating recordPHP Laravel save() 没有更新记录
【发布时间】:2021-04-20 13:55:11
【问题描述】:

我是 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(); 中的 Main main 导致记录不更新

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

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

【问题讨论】:

  • 是否有任何错误或记录没有改变?
  • 没有错误,记录没有改变

标签: php laravel


【解决方案1】:

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

    public $primaryKey = 'ID';

【讨论】:

  • 这行得通。这是区分大小写的问题吗?正如你提到的默认主键是'id'。
  • 是的,你的字段名称是 CamelCaseit 意味着以大写字母开头,所以 Id 和 id 和 ID 是不同的名称
  • 好的。下次我会接受的。
【解决方案2】:

您可以尝试的一件事是使用 Laravel 的 update 方法。 update 将在内部处理保存。

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

$student->update([
    'Name' => $req->input('name'),
    'Marks' => $req->input('marks'),
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 2016-06-12
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2023-03-28
    • 2017-11-10
    相关资源
    最近更新 更多