首页 > 解决方案 > Laravel 使用查询生成器更新记录

问题描述

我从事 laravel 项目并尝试使用查询生成器更新记录但它不起作用,这是我尝试在其中编辑记录的功能

public function editchecksave(Request $request)
{
    $id = $request->id;
    $username = $request->username;
    $attribute = $request->attribute;
    $value = $request->value;
    $op = $request->op;

    $result = DB::update('update radcheck set username = "?" , 
        attribute="?",value="?" ,op="?" where id = ?', 
        [$username,$attribute,$value,$op,$id]
    );

    if ($result)
    {
        return response()->json([ 'msg' => 'Updated Successfully' . $username]);
    }

    return response()->json([ 'msg' => 'Not Updated Successfully'. $value]);
}

这是路线

 Route::get( 'radcheckedit', 'radcheckController@editchecksave' );

当我不更改更新查询中的第一个元素时,它没有更新,但是当我更改第一个元素时,它成功更新了。换句话说(当我更改用户名的值时,它成功更新并且当我不更改用户名时没有更新,当我将属性第一个元素放在查询中时,它必须更改它的值才能进行更新,因此用户必须更改查询的第一个值,这不好,因为用户可能不想编辑这个元素)

它给了我消息未成功更新

标签: laravellaravel-query-builder

解决方案


您不应该在函数中放置原始查询update,它需要一组要更新的值。您可以使用内置的 querybuilder 编写查询:

$result = DB::table('radcheck')
    ->where('id', $id)
    ->update([
        'username' => $username,
        'attribute' => $attribute,
        'value' => $value,
        'op' => $op
    ]);

甚至更好,而无需手动从请求中获取变量:

$result = DB::table('radcheck')
    ->where('id', $id)
    ->update($request->only(['username', 'attribute', 'value', 'op']));

这也将使代码更具可读性。


推荐阅读