fastadmin后台联查where

时间:2025-04-20 08:19:10

fastadmin后台联查where

最近fastadmin开发的时候碰到一个问题

  1. a表作为主表联查b表
    需要获取b表的 status未2的所有数据

  2. 用了 tp5的一对一关联 发现haswhere和where同时使用会报错
    网上有说 haswhere 里放where条件,没试,有兴趣的童鞋可以试试

  3. fastadmin中where都是封装过的

list($where, $sort, $order, $offset, $limit) = $this->buildparams(); 
  1. 最终解决办法
    控制器中方法
/**
     * 查看
     */
    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 = ')
                    ->where($where)
                    ->where('',2)
                    ->count();
            $list = $this->model
                    ->alias('a')
                    ->join('zc_task b','a.task_id = ')
                    ->where($where)
                    ->where('',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();
    }
  1. js中
{field: '', title: __('Id'),formatter: function (value,row) {
                                return ;
                            }},
                        {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时候会在中报一个错

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];
                    }

注释即可
欢迎一起讨论