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下拉菜單就生成了 並且有了自動選中的功能

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM