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