查询表达式文档
| 表达式 | 含义 |
|---|---|
| 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)
$subQuery = Db::name('two')->field('uid')->where('gender', '男')->buildSql(true);$result = Db::name('one')->where('id', 'exp', 'IN '.$subQuery)->select();
如果使用DB查询的话,可使用闭包用法:
$result = Db::name('one')->where('id', 'in', function($query) {$query->name('two')->field('uid')->where('gender', '男');})->select();
批量新增
相关说明连接
鉴于thinkphp 5的写法,看文档是新增用$model->save()方法。如果是批量增加的话,就有两种做法:
做法一:$model->saveAll($data);
做法二:$model->isUpdate(false)->save();//循环
遇到的问题:
做法二, 在遍历插入第二条数据时失败;
需要将数据使用data将数据更新一下
for($i = 0; $i < 4; $i++){$res = $student->data($data, true)->isUpdate(false)->save();dump($student->id);}
字段获取/修改器:
<?phpclass Reserve extends BaseModel{// 获取start_time的值并转换为格式化字符串public function getStartTimeAttr($value){return date("Y-m-d H:i", $value);}// 设置start_time的值存储时转为时间戳public function setStartTimeAttr($value){return strtotime($value);}// 对rack_type字段进行map转换public function getRackTypeAttr($value){$RackType = [1 => '早餐', 2 => '午餐', 3 => '晚餐'];return ['text' => $RackType[$value], 'value' => $value];}}
获取原始字段用getData()
$reserve->getData('rack_type');
