当前位置: 首页 > news >正文

laravel chunkById 分块查询 使用时的问题

laravel chunkById 分块查询 使用时容易出现的问题

1. SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‘id’ in where clause is ambiguous

使用chunkById时,单表进行分块查询,是不会出现id重复的,当用两个表进行 join 查询,如果两个表都存在ID,则会报以上的错误信息

DB::table('table1')->select(['table1.id'])->join('table2', 'table1.id', '=', 'table2.id')->orderBy('table1.id')->chunkById(100, function ($results) {});

如何解决:需要指定第三个参数是用哪个表的ID,例如 table1.id

需要指定第四个参数,参数形参为 $alias,

 $lastId = $results->last()->{$alias};

意为查询出数据以后获取对应的属性,来查询最大值,相当于只要在查询的字段中取值即可, 例如 id

如果不指定第四个参数:会报 Undefined property: stdClass::$table1.id

 $alias = $alias ?: $column;

第一页执行完成以后,来查询最大的ID, $alias = table1.id

$results->last()->table1.id

查询出的值内并不会有 table1.id 的key

以下为源码:

    /*** Chunk the results of a query by comparing numeric IDs.** @param  int  $count* @param  callable  $callback* @param  string  $column* @param  string  $alias* @return bool*/public function chunkById($count, callable $callback, $column = 'id', $alias = null){$alias = $alias ?: $column;$lastId = 0;do {$clone = clone $this;// We'll execute the query for the given page and get the results. If there are// no results we can just break and return from here. When there are results// we will call the callback with the current chunk of these results here.$results = $clone->forPageAfterId($count, $lastId, $column)->get();$countResults = $results->count();if ($countResults == 0) {break;}// On each chunk result set, we will pass them to the callback and then let the// developer take care of everything within the callback, which allows us to// keep the memory low for spinning through large result sets for working.if ($callback($results) === false) {return false;}$lastId = $results->last()->{$alias};unset($results);} while ($countResults == $count);return true;}```

http://www.mrgr.cn/news/67839.html

相关文章:

  • 雷池社区版7.1新版本自定义NGINX配置分析
  • 什么是模型压缩?
  • ubuntu 22.04 server 安装 和 初始化 LTS
  • Java基础语法①Java特点+环境安装+IDEA使用
  • cuda 环境搭建
  • nginx配置代理地址
  • ES集群搭建(仅供自己参考)
  • 恢复rm -rf删除的数据
  • 源代码泄漏怎么办?SDC沙盒成为破局利器
  • UVM的callback机制
  • 网络规划设计师-(11)网络层
  • 上下文保护
  • 技术总结(二十二)
  • MySQL之事务
  • hive面试题,超详细解析。各类型专利top 10申请人,以及对应的专利申请数
  • python入门到精通知乎万赞推荐书籍《流畅的Python》,《流畅的Python》PDF免费下载
  • Hive中各种Join的实现
  • 【系统架构设计师】高分论文:论企业应用系统的分层架构风格
  • 数据结构之单链表(C语言)
  • linux基础知识
  • day-81 打家劫舍 II
  • 焊接覆层耐磨板行业全面且深入的分析
  • 【零基础学习CAPL】——XML工程创建与使用详解
  • uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
  • Java题目笔记(十四)Date +综合练习
  • ruoyi-vue集成tianai-captcha验证码