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下拉菜单就生成了 并且有了自动选中的功能
原文:https://www.cnblogs.com/zwsblogs/p/12659580.html