今天开发遇到一个需求,fastadmin 动态下拉SelectPage,要读取关联表的数据
本来想着利用系统内置的Selectpage的实现方法,看了一下源码是不支持连表数据的,本来想着直接修改原始代码增加属性参数方式兼容联表查询,本着不改变原始的原则,自己独立写了一个Selectpage方法来实现。
展示效果
测试可以关联多个表的数据,同时支持搜索关联表数据
自己比较懒没有做更进一步细化,关联的模型是写死的,如果有兴趣的朋友可以改装一下,做成属性配置的这样可以放到公共方法里,就不用每个控制器都得写一个Selectpage,如果独立的Selectpage代码我是复制原Selectpage改动了一下,没做代码净化,其实是可以删减很多的。
1、php代码
在当前控制器里添加这个方法,则有限调用控制器的selectpage方法,如果不增加则继承父类的selectpage
`protected function selectpage()
{
//设置过滤方法
$this->request->filter([‘trim’, ‘strip_tags’, ‘htmlspecialchars’]);
//搜索关键词,客户端输入以空格分开,这里接收为数组
$word = (array)$this->request->request("q_word/a");
//当前页
$page = $this->request->request("pageNumber");
//分页大小
$pagesize = $this->request->request("pageSize");
//搜索条件
$andor = $this->request->request("andOr", "and", "strtoupper");
//排序方式
$orderby = (array)$this->request->request("orderBy/a");
//显示的字段
$field = $this->request->request("showField");
//主键
$primarykey = $this->request->request("keyField");
$primarykey = 'book.'.$primarykey;
//主键值
$primaryvalue = $this->request->request("keyValue");
//搜索字段
$searchfield = (array)$this->request->request("searchField/a");
//自定义搜索条件
$custom = (array)$this->request->request("custom/a");
//是否返回树形结构
$istree = $this->request->request("isTree", 0);
$ishtml = $this->request->request("isHtml", 0);
if ($istree) {
$word = [];
$pagesize = 999999;
}
$order = [];
foreach ($orderby as $k => $v) {
$order[$v[0]] = $v[1];
}
$field = $field ? $field : 'name';
//如果有primaryvalue,说明当前是初始化传值
// var_dump($searchfield);
if ($primaryvalue !== null) {
$where = [$primarykey => ['in', $primaryvalue]];
$pagesize = 999999;
} else {
$where = function ($query) use ($word, $andor