跳转至

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

找到 addedit 方法,在渲染页面前给模板传入父级下拉列表:

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)。