🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## **数据列表输出** ThinkLibrary 与 ThinkPHP 组合起来就是现在的 ThinkAdmin v5,都是基于 Composer 来管理; 如果需要使用到 ThinkLibrary 里面的功能,控制器需要继承 `\library\Controller` 类。 ### **数据列表操作** 在控制器访问中只需加入`$this->page(表名)`可以显示默认数据表的分页列表。 如果需要对列表进行条件处理,可以使用查询器来实现。如: ```php // 创建查询器(查询器支持链式操作) $query = $this->_query('表名')->where(['status'=>'1']); // 查询器分页输出 $query->page(); ``` **注意**:在 ThinkPHP 5.1 之后,控制器不需要直接返回内容了,函数`_page`里面使用`HttpResponseException`直接输出机制。 另外对于`url`输入的变量也可以快速输入到查询器条件中,如: ```php // 创建查询器 $query = $this->_query('表名'); // 切入url参数,接收 username 和 sex 并使用 like 查询,接收 status 使用 eq 查询 $query->like('username,sex')->equal('status'); // 查询器分页输出 $query->page(); ``` 有时候,`url`输入的名称与数据字段不一定是匹配的,所以需要用到别名,这里就需要按规则写条件,如: ```php // 切入url参数,接收 username_alias 和 sex 并使用 like 查询,接收 user_status 使用 eq 查询 // 这里用到了别名,username_alias 对应数据库中的 username 字段,user_status 对应数据库的 status 字段 $query = $this->_query('表名')->like('username#username_alias,sex')->equal('status#user_status'); // 查询器分页输出 $query->page(); ``` 输出额外数据到模板,与 ThinkPHP 操作无异,如: ```php // 额外列表数据赋值到模板,模板里直接使用变量 $userList $this->userList = Db::name('User')->where(['status'=>'1'])->select(); // 切入url参数,接收 username 和 sex 并使用 like 查询,接收 status 使用 eq 查询 $query = $this->_query('表名')->like('username,sex')->equal('status'); // 查询器分页输出 $query->page(); ``` #### 数据回调处理 对于通过`page`方法实现的即将显示到模板的列表,还可以进行引用二次处理,如: ```php protected function _page_filter(&$data){ // 这里可以对 $data 进行二次处理,注意是引用 } ### 当一个控制器存在多个page操作时,可以指定回调前缀 protected function _index_page_filter(&$data){ // 精准回调对 $data 进行二次处理,注意是引用 } ``` ----- 下面提供一个完整的DEMO ~~~ /** * 系统操作日志 * @auth true * @menu true * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function index() { $this->title = '系统操作日志'; $query = $this->_query($this->table)->like('action,node,content,username,geoip'); $query->dateBetween('create_at')->order('id desc')->page(); } /** * 列表数据处理 * @param array $data * @throws \Exception */ protected function _index_page_filter(&$data) { $ip = new \Ip2Region(); foreach ($data as &$vo) { $result = $ip->btreeSearch($vo['geoip']); $vo['isp'] = isset($result['region']) ? $result['region'] : ''; $vo['isp'] = str_replace(['内网IP', '0', '|'], '', $vo['isp']); } } ~~~ 快捷查询器同样保留原 ThinkPHP Query 的功能,也可以使用关联查询。 ```php // 我们可以获取到ThinkPHP默认Db操作对象 // 在这里对Db进行操作,如果 $db->where()->buildSql() 等等 $db = $this->_query('表名')->db(); // 对于联表操作,需要指定 filed,join 如果用到了条件查询,一定要用上别名查询 $query = $this->_query('table_a')->alias('a')->field('a.id,a.name,b.pid,b.nickname'); $query->join('table_b b','a.id=b.pid')->like('a.name#a_name')->page(); ```