Laravel 5.4:直接从数据库中的列中减去数字

Posted

技术标签:

【中文标题】Laravel 5.4:直接从数据库中的列中减去数字【英文标题】:Laravel 5.4: Directly Subtract number from column in database 【发布时间】:2018-05-06 00:45:42 【问题描述】:

我想从数据库中具有 int 数据类型的信用列中减去 100 个数字。我正在寻找用一些 Laravel 查询直接减去它的方法。但是现在我首先从表中获取列值,然后减去,然后需要编写更新查询来更新它,如下所示:

$subtractCredit = 100;

// Get Total Credit
$totalCredit = User::select('credit')->where(['username'=>$username])-
>first(); 

// Subtract 100 from Total Credit
$totalCredit = $totalCredit->credit - $subtractCredit;

// Update Credit in Table
User::where(['username'=>$username])->update(['credit' => $totalCredit]);

在上面的代码中,我首先从查询中获取总信用,然后从总信用中减去 100,然后使用更新查询再次更新信用。

请告诉我更好的方法。

【问题讨论】:

【参考方案1】:

你可以用原始查询来做到这一点,

User::where('username', $username)
->update(array(
    'credit' => DB::raw('credit - 100')
));

希望你能理解。

【讨论】:

你的选择也是正确的,但我发现 laravel 的 decrement 内置功能更好。 @AmitGupta 是的,这是一种解决方案,但上面提供的解决方案更好,您可以使用上述解决方案进行可变的减量/增量【参考方案2】:

有一个内置的递减函数:

User::where('username', $username)->decrement('credit', 100);

文档:https://laravel.com/docs/5.4/queries#increment-and-decrement

请注意,它是更新语句的糖,因此您无需在之后调用 save()update()

【讨论】:

谢谢!我正在我的代码中尝试这个,如果它有效,我会尽快通知你。 我很高兴它有帮助。 :)

以上是关于Laravel 5.4:直接从数据库中的列中减去数字的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 Eloquent where parent

created_at 列中的时间不正确 - Laravel 5.4

您可以从一个表中的列中调用数据以在 SQL 和 Laravel 中的另一个表中使用吗?

Sqlite 从不同的列中减去不同的行

Laravel 5.4 分页链接未显示在视图中

如何查询数据库以查找包含来自多选 (Laravel) 的 json 数据的列中的元素