doufeng3602 2019-02-17 06:00
浏览 421
已采纳

具有多个条件的laravel查询更新

I have column named flag and I want to update it if value is 1 to null and if value is null to 1 so far is easy to update this column but issue comes where I send multiple data to controller and not only one.

code

public function flagmultiplemessage(Request $request){
  $ids = $request->input('ids');
  DB::table('messages')->whereIn('id', $ids)
  ->whereNotNull('messages.flag')->update(['flag' => null])
  ->whereNull('messages.flag')->update(['flag' => '1']);
}

with function above i get:

message Call to a member function whereNull() on integer

dd

code above is something like this:

ids = [11, 12, 3]
database = [
  11->flag = 1,
  12->flag = null,
  3->flag = 1,
]

the result of code above most change my database like:

database = [
  11->flag = null,
  12->flag = 1,
  3->flag = null,
]

any idea why i get error?

  • 写回答

3条回答 默认 最新

  • douliaodan2738 2019-02-17 06:36
    关注

    it occurred because you called whereNull method on update method. You should run 3 separate query like this.

    public function flagmultiplemessage(Request $request){
      $ids = $request->input('ids');
    
      DB::transaction(function () use ($ids) {
        DB::table('messages')->whereIn('id', $ids)
        ->whereNotNull('messages.flag')->update(['flag' => 0]);
    
        DB::table('messages')->whereIn('id', $ids)
        ->whereNull('messages.flag')->update(['flag' => 1]);
    
        DB::table('messages')->whereIn('id', $ids)
        ->where('messages.flag', 0)->update(['flag' => null]);
    
      });
    
    }
    
    

    but for better performance I suggest you use boolean for flag column and use this simple query

    DB::table('messages')->whereIn('id', $ids)->update(['flag' => DB::raw('!flag')]);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器