zoukankan      html  css  js  c++  java
  • 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下拉菜单就生成了 并且有了自动选中的功能

  • 相关阅读:
    Vim Reference
    Java 8 Consumer、Supplier、Predicate、Function
    Java 8 Stream 用法
    Java 基础 Builder模式
    Spring/Spring-Boot 学习 使用自定义的ArgumentResolver
    架构之分布式图片存储系统架构
    微服务和SOA服务
    Centos 上 Tengine安装
    .NET平台上插拔姿势的AOP
    P1424 刷题记录
  • 原文地址:https://www.cnblogs.com/zwsblogs/p/12659580.html
Copyright © 2011-2022 走看看