更改的字段数据在 Laravel 中不起作用

Field data changed is not working in Laravel

我正在尝试检查 Laravel 模型中的值是否更改,isDirty 永远不会执行。如果我删除 isDirty 数据更新工作正常,只有 ìsDirty 不工作。

public function update(TeacherRequest $request, $id)
{
    $teacher = Teacher::find($id);

    if ($teacher->isDirty($request)) {
        $new_data = $teacher->$request;
        $old_data = $teacher->getOriginal($request);
        return response()->json([
            'msg' => $new_data,
            'msg' => $old_data
        ]);
    }

    if ($teacher->save()) {
        $teacher->update($request->all();
    }
}

我也尝试只检查 one column 是否已更改。

单列检查:

if ($teacher->isDirty('efirst')) {
    $new_data = $teacher->efirst;
    $old_data = $teacher->getOriginal('efirst');
    return response()->json([
        'msg' => $new_data,
        'msg' => $old_data
    ]);
}

efirst 是第一列和输入字段的名称。

即使我更改了数据,我也没有得到任何输出。

这样不行。如果在模型本身上修改了字段,则模型的 isDirty() 将 return 为真。它需要一个可选参数,即 要检查的参数列表 ,而不是它们的新值。如果您在 Model::find() 之后检查 isDirty(),它将始终 return false。 所以你需要反过来做:

  1. 查找模型
  2. 将请求中的新字段设置到它(不要保存!)
  3. 勾选isDirty()