fastadmin后台联查where
最近fastadmin开发的时候碰到一个问题
-
a表作为主表联查b表 需要获取b表的 status未2的所有数据 -
用了 tp5的一对一关联 发现haswhere和where同时使用会报错 网上有说 haswhere 里放where条件,没试,有兴趣的童鞋可以试试 -
fastadmin中where都是封装过的
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
- 最终解决办法
控制器中方法
/**
* 查看
*/
public function index()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax()) {
//如果发送的来源是Selectpage,则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->alias('a')
->join('zc_task b','a.task_id = b.id')
->where($where)
->where('b.status',2)
->count();
$list = $this->model
->alias('a')
->join('zc_task b','a.task_id = b.id')
->where($where)
->where('b.status',2)
->order('a.'.$sort, $order)
->limit($offset, $limit)
->field('a.*')
->select();
$list = collection($list)->toArray();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
- js中
{field: 'a.id', title: __('Id'),formatter: function (value,row) {
return row.id;
}},
{field: 'a.task_id', title: __('Task_id'),searchList: $.getJSON("task/searchList"),formatter: function (value,row) {
return row.task_text;
}},
{field: 'a.qrganization_id', title: __('Qrganization_id'),searchList: $.getJSON("qrganization/searchList"),formatter: function (value,row) {
return row.qrganization_text;
}},
{field: 'a.admin_a_id', title: __('Admin_a_id'),searchList: $.getJSON("auth/admin/searchList"),formatter: function (value,row) {
return row.admin_a_text;
}},
js中field放置 表.字段 参与查询 再用 formatter 重新渲染 配合tp5的获取器展示即可
{field: 'a.rate_a_time', title: __('Rate_a_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false,formatter: function (value,row) {
return row.rate_a_time_text;
}},
像上述代码出现range时候会在backend.php中报一个错
case 'RANGE':
case 'NOT RANGE':
$v = str_replace(' - ', ',', $v);
$arr = array_slice(explode(',', $v), 0, 2);
if (stripos($v, ',') === false || !array_filter($arr)) {
continue 2;
}
//当出现一边为空时改变操作符
if ($arr[0] === '') {
$sym = $sym == 'RANGE' ? '<=' : '>';
$arr = $arr[1];
} elseif ($arr[1] === '') {
$sym = $sym == 'RANGE' ? '>=' : '<';
$arr = $arr[0];
}
$tableArr = explode('.', $k);
if (count($tableArr) > 1 && $tableArr[0] != $name && !in_array($tableArr[0], $alias) && !empty($this->model)) {
//修复关联模型下时间无法搜索的BUG
$relation = Loader::parseName($tableArr[0], 1, false);
$alias[$this->model->$relation()->getTable()] = $tableArr[0];
}
$where[] = [$k, str_replace('RANGE', 'BETWEEN', $sym) . ' TIME', $arr];
break;
将上述代码中的
$tableArr = explode('.', $k);
if (count($tableArr) > 1 && $tableArr[0] != $name && !in_array($tableArr[0], $alias) && !empty($this->model)) {
//修复关联模型下时间无法搜索的BUG
$relation = Loader::parseName($tableArr[0], 1, false);
$alias[$this->model->$relation()->getTable()] = $tableArr[0];
}
注释即可 欢迎一起讨论
|