业务中碰到需要查询用户有多少条签到记录,但是并没有关联的情况下,直接查询会出现找不到字段的情况
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
经过 buildparams 处理后不好修改
可以在 buildparams 之前处理
{field: 'time', title: __('时间区间'), visible: false, formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},
在js添加完成以后 由于user表内没有time 会报错,只需要重写一个where即可
/**
* 查看
*/
public function index()
{
//设置过滤方法
$this->request->filter(['strip_tags', 'trim']);
if ($this->request->isAjax()) {
//如果发送的来源是Selectpage,则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
$filter = json_decode($this->request->get("filter", ''), true);
$op = json_decode($this->request->get("op", '', 'trim'), true);
if (isset($filter['time'])) {
//自定义处理
$time = explode(" - ", $filter['time']);
//处理完可以去掉也可以覆盖重构
unset($filter['time'], $op['time']);
}
$this->request->get(['filter' => json_encode($filter, true)]);
$this->request->get(['op' => json_encode($op, true)]);
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list = $this->model
->with(['group'])
->where($where)
->order($sort, $order)
->paginate($limit);
foreach ($list as &$v) {
$v->avatar = $v->avatar ? cdnurl($v->avatar, true) : letter_avatar($v->nickname);
$v->hidden(['password', 'salt']);
if (isset($time)) {
$v['clock'] = Sign::where(['uid' => $v['id']])->whereTime('createtime', 'between', [$time[0], $time[1]])->select();
}
}
$result = array("total" => $list->total(), "rows" => $list->items());
return json($result);
}
return $this->view->fetch();
}