查询表达式文档

表达式 含义
EQ、= 等于(=)
NEQ、<> 不等于(<>)
GT、> 大于(>)
EGT、>= 大于等于(>=)
LT、< 小于(<)
ELT、<= 小于等于(<=)
LIKE 模糊查询
[NOT] BETWEEN (不在)区间查询
[NOT] IN (不在)IN 查询
[NOT] NULL 查询字段是否(不)是NULL
[NOT] EXISTS EXISTS查询
EXP 表达式查询,支持SQL语法
> time 时间比较
< time 时间比较
between time 时间比较
notbetween time 时间比较

子查询:

遇到的问题:

使用where IN语句进行子查询时, where(‘racking_id’, ‘in’, $sql) 查询sql会不识别
可更换为 where(‘racking_id’, ‘exp’, ‘IN’.$sql)

  1. $subQuery = Db::name('two')->field('uid')->where('gender', '男')->buildSql(true);
  2. $result = Db::name('one')->where('id', 'exp', 'IN '.$subQuery)->select();

如果使用DB查询的话,可使用闭包用法:

  1. $result = Db::name('one')->where('id', 'in', function($query) {
  2. $query->name('two')->field('uid')->where('gender', '男');
  3. })->select();

批量新增

相关说明连接
鉴于thinkphp 5的写法,看文档是新增用$model->save()方法。如果是批量增加的话,就有两种做法:
做法一:$model->saveAll($data);
做法二:$model->isUpdate(false)->save();//循环

遇到的问题:

做法二, 在遍历插入第二条数据时失败;
需要将数据使用data将数据更新一下

  1. for($i = 0; $i < 4; $i++){
  2. $res = $student->data($data, true)->isUpdate(false)->save();
  3. dump($student->id);
  4. }

字段获取/修改器:

  1. <?php
  2. class Reserve extends BaseModel
  3. {
  4. // 获取start_time的值并转换为格式化字符串
  5. public function getStartTimeAttr($value)
  6. {
  7. return date("Y-m-d H:i", $value);
  8. }
  9. // 设置start_time的值存储时转为时间戳
  10. public function setStartTimeAttr($value)
  11. {
  12. return strtotime($value);
  13. }
  14. // 对rack_type字段进行map转换
  15. public function getRackTypeAttr($value)
  16. {
  17. $RackType = [1 => '早餐', 2 => '午餐', 3 => '晚餐'];
  18. return ['text' => $RackType[$value], 'value' => $value];
  19. }
  20. }

获取原始字段用getData()

  1. $reserve->getData('rack_type');