【问题标题】:Laravel Update Record using Query BuilderLaravel 使用查询生成器更新记录
【发布时间】:2018-11-22 17:48:59
【问题描述】:

我从事 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' );

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

它给我消息未成功更新

【问题讨论】:

  • DB::update 不应该以您在这里使用的方式使用,我不确定它是否接受原始查询,如果接受,您必须做点什么比如DB::update(DB::raw('query here')); 你应该看看documentation 用于基于更新的查询生成器。
  • 没用,谢谢
  • 咨询下面的@Jerodev 答案,这是您最好的解释。

标签: laravel laravel-query-builder


【解决方案1】:

您不应该在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']));

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

【讨论】:

  • 感谢您的回复,但它返回了{“msg”:“未成功更新”}消息我不知道哪里出错了
  • 您确定该表有这些列并且没有任何限制阻止您更新这些数据吗?
  • 是的,我发现错误是,当我不更改用户名时,它没有更新,当我更改用户名时,它更新成功,所以我的错误在哪里?
  • @Muh 我认为如果您发送相同的数据来更新数据库中的记录不会“执行”查询,因为值是相同的(这是一种优化),所以如果你想总是更新,你必须发送一个像“updated_at”这样的字段,然后你的验证就可以工作了,为了做到这一点,你可以在查询中添加像'updated_at' => \Carbon\Carbon::now() 这样的内容。
【解决方案2】:

我相信您需要更改您的 DB:Update 实施,请查看此答案: DB::update laravel 5 raw query

【讨论】:

    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 2018-06-24
    • 2019-01-28
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多