Laravel 如何更新多条数据库记录?

3

我是Laravel的新手。我只是试图更新mysql表的一整行数据,数据来自表单。我只能更新2个记录,其余的变成了NULL。我确定Controller中的字段名与表单中的输入字段名以及mysql表中的字段名匹配。同时我也确保模型中 "fillable" 方法中列出的字段都被填充。

在Controller尝试过以下方法:

public function approve($id, Request $request)
{
    $name = $request->input('name');
    $mark = $request->input('mark');
    $email = $request->input('email');
    $dob = date('Y-m-d H:i:s', strtotime($request->input('dob')));
    $country = $request->input('country');
     
    Certificate::where('id', '=', $id)
        ->update([
            'mark' => $mark,
            'name' => $name, 
            'dob' => $dob,
            'country' => $country
        ]);
}

我也尝试过

$query = DB::update("UPDATE certificates SET name='$name', mark='$mark', dob='$dob', country='$country' WHERE id='$id'");

请告诉我可能做错了什么,谢谢。


你确定你从表单中接收了所有字段,并且没有进行验证吗? - Vasyl Zhuryk
暂时不需要验证,是的。 - user2305672
您正在使用where子句进行更新。您将仅更新满足where子句条件的记录。 - Giacomo M
是的,这正是我想做的事情,但在行ID = 2上,我无法更新该行上的所有记录。 - user2305672
当您调用该函数时,$id是否等于2? - IGP
你能展示一下HTML表单和路由吗? - fff
1个回答

3

使用DB门面时,我遇到了类似于这样的错误,所以我使用了以下代码:

use Illuminate\Support\Facades\DB;


 DB::table('certificates')
    ->where('id', $id)
    ->update([
    'mark' => $request->mark,
    'name' => $request->name, 
    'email' => $request->email,
    'dob' => $request->dob,
    'country' => $request->country
]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接