laravel-admin select关联

laravel-admin中如果两个表数据有关联 这时该如何在界面上体现 以下面啊两个数据表为例

CREATE TABLE `equipment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `deleted_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB 
CHARSET=utf8mb4

CREATE TABLE `item` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `eid` int(10) unsigned DEFAULT NULL COMMENT '对应设备id',
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `deleted_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB
CHARSET=utf8mb4

一个设备表  一个为设备项目表  外键为eid

这时用自动生成的表单  bid这一项默认为一个input表单 我们的目的是把bid作为select表单的格式来展示以及操作

首先 在item的model里面加上模型关联  如何关联模型详见laravel文档中的orm部分

  public function equipment()
  {
      return $this->belongsTo(Equipment::class, 'eid', 'id');
  }

第二步 在item的控制器的detail和grid方法中设置bid字段 让其显示对应的equipment的name值而不是原始bid的值  使用equipment.name

    protected function grid()
    {
        $grid = new Grid(new Item());

        $grid->column('id', __('Id'));
        $grid->column('name', __('项目名称'));
        $grid->column('equipment.name', __('所属设备'));

        return $grid;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(Item::findOrFail($id));

        $show->field('id', __('Id'));
        $show->field('name', __('项目名称'));
        $show->field('equipment.name', __('所属设备'));

        return $show;
    }

第三步 写一个equipment的数据接口来给item内容编辑时提供equipment的数据  (equipment控制器)

    public function api(){
        $data = Equipment::select('id','name as text')->get();
        return response()->json($data);
    }

并且加上路由(add/admin/route.php)

  $router->any('equipment/api', 'EquipmentController@api');

再把item控制器中略作修改

protected function form()
    {
        $form = new Form(new Item());

        $form->text('name', __('项目名称'));
        $form->select('eid', __('所属设备'))->options('/admin/equipment/api');

        return $form;
    }

option中为接口路径

此时item的编辑页中select下拉菜单就生成了 并且有了自动选中的功能

猜你喜欢

转载自www.cnblogs.com/zwsblogs/p/12659580.html