FastAdmin 字段中有 父id(父级地区)显示父级的名称(而不是纯数字ID)并且通过下拉选择框(select)来选择上级地区
============================================================= 下面是标准的 FastAdmin 解决方案👇
✅ 一、在 application/admin/model/Area.php(模型)里
确认模型存在 pid(或 parent_id)字段,并定义关联:
public function parent()
{
return $this->belongsTo(\app\admin\model\Area::class, 'pid', 'id')->field('id,name');
}
✅ 二、在 application/admin/controller/Area.php 里
找到 add 和 edit 方法,在渲染页面前给模板传入父级下拉列表:
public function add()
{
if ($this->request->isPost()) {
return parent::add();
}
// 获取所有地区供选择
$areaList = \app\admin\model\Area::where('level', '<', 3)->column('name', 'id');
$this->view->assign('parentList', $areaList);
return $this->view->fetch();
}
public function edit($ids = null)
{
$row = $this->model->get($ids);
if (!$row) {
$this->error(__('No Results were found'));
}
if ($this->request->isPost()) {
return parent::edit($ids);
}
$areaList = \app\admin\model\Area::where('level', '<', 3)->column('name', 'id');
$this->view->assign('parentList', $areaList);
$this->view->assign('row', $row);
return $this->view->fetch();
}
✅ 三、在视图模板 application/admin/view/area/edit.html 中
找到 父id 这一项(你截图里的第一行),改成下拉选择框:
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('父级')}</label>
<div class="col-xs-12 col-sm-8">
<select name="row[pid]" class="form-control selectpicker" data-live-search="true">
<option value="0">顶级</option>
{foreach name="parentList" item="vo" key="key"}
<option value="{$key}" {in name="row.pid" value="$key"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
✅ 四、效果
修改后页面中:
- 父级地区会以“名称”显示,而不是纯数字;
- 可以直接通过下拉菜单选择;
- 支持搜索(因为用了
data-live-search="true"和selectpicker)。