fastadmin官方文档关联查询只支持连接1个表,但是其实经过其他前辈和自己的测试,完全可以支持2以上多表连接查询,仅此纪念之前走过的弯路。
控制器部分
public function index()
{
//当前是否为关联查询
$this->relationSearch = true;
//设置过滤方法
$this->request->filter(['strip_tags', 'trim']);
if ($this->request->isAjax()) {
//如果发送的来源是Selectpage,则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list = $this->model
->with(['projectinfo','projectuser']) //projectinfo为关联的第1个表,projectuser为关联的第2个表,注意这里必须是数组
->where($where)
->order($sort, $order)
->group('projectinfo.project_id') //如果多表存在相同字段,这里需要加上主表的表名
->paginate($limit);
foreach ($list as $row) {
$row->visible(['id','project_id','cj_start_date','cj_finish_date','cp_start_date','cp_finish_date','project_status','register_status','file_status','remark']);
$row->visible(['projectinfo','projectuser']); //这里需要加上连接查询的多表
$row->getRelation('projectinfo')->visible(['project_name']);
$row->getRelation('projectuser')->visible(['shishilist']); //这里需要加上连接查询的多表
}
$result = array("total" => $list->total(), "rows" => $list->items());
return json($result);
}
return $this->view->fetch();
}
模型部分
public function projectinfo()
{
return $this->belongsTo('app\admin\model\Projectinfo', 'project_id', 'project_id', [], 'LEFT')->setEagerlyType(0);
}
//以下为新增的第2个表,左连接查询
public function projectuser()
{
return $this->belongsTo('Projectuser', 'project_id', 'project_id', [], 'LEFT')->setEagerlyType(0);
}
语言部分
<?php
return [
'Id' => '序号',
//以下为新增的字段,需要加上表名
'Projectinfo.project_name' => '项目名称',
'Projectuser.shishilist' => '实施组长'
];
JS部分
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'project_id',
columns: [
[
{checkbox: true},
{field: 'project_id', title: __('Project_id'), operate: 'LIKE'},
//关联的第1个表的字段
{field: 'projectinfo.project_name', title: __('Projectinfo.project_name'), operate: 'LIKE'},
//关联的第2个表的字段
{field: 'projectuser.shishilist', title: __('Projectuser.shishilist'), formatter: Table.api.formatter.status},
{field: 'cj_start_date', title: __('Cj_start_date'), operate:'=', addclass:'datetimerange', autocomplete:false},
{field: 'cj_finish_date', title: __('Cj_finish_date'), operate:'=', addclass:'datetimerange', autocomplete:false},
{field: 'cp_start_date', title: __('Cp_start_date'), operate:'=', addclass:'datetimerange', autocomplete:false},
{field: 'cp_finish_date', title: __('Cp_finish_date'), operate:'=', addclass:'datetimerange', autocomplete:false},
{field: 'file_status', title: __('File_status'), searchList: {"未归档":__('未归档'),"已归档":__('已归档')}, formatter: Table.api.formatter.status},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});