IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> fastadmin后台联查where -> 正文阅读

[PHP知识库]fastadmin后台联查where

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 = 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();
    }
  1. 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];
                    }

注释即可
欢迎一起讨论

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:38:00  更:2021-09-10 10:40:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:55:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码