我有一个这样的表:
key | counter | arrived |
123 | | |
121 | | |
313 | | |
543 | | |
我需要用一个增量值来计数计数器列,并以“ 1”到达,都像这样:
key | counter | arrived |
723 | 1 | 1 |
421 | 2 | 1 |
313 | 3 | 1 |
543 | 4 | 1 |
我将所有这些键放在一个数组中,而我的查询如下:
$update = DB::table('Selection')
->WhereIn('key', array_keys($req['aff']))
->update([
'arrived' => 1
]);
在数组array_keys($req['aff'])
中,我拥有需要更新的所有密钥,我可以用“ 1”更新"arrived"
列
但是我不知道如何用增量填充计数器列 值。
我也尝试过,但是没有机会:
$update = DB::table('Selection')
->WhereIn('key', array_keys($req['aff']))
->update([
'arrived' => 1,
'counter' => DB::raw('counter+1')
]);
有什么建议吗?
在此先感谢您,并祝您圣诞节快乐:D
答案 0 :(得分:1)
您需要在此处使用mysql IFNULL
方法,因为如果您的值是null,则不能递增值,因此,如果值是 null,则设置默认值,值是零
\DB::table('Selection')
->whereIn('key', array_keys($req['aff']))
->update([
'arrived' => 1,
'counter' => \DB::raw('IFNULL(counter,0) + 1')
]);
有关更多信息,请阅读此问题see
请注意mysql数据类型必须为int,并且默认设置为零
在sql server中使用了ISNULL
这样的函数
\DB::table('Selection')
->whereIn('key', array_keys($req['aff']))
->update([
'arrived' => 1,
'counter' => \DB::raw('ISNULL(counter,0) + 1')
]);
有关更多信息,请阅读此article