Laravel Backpack 新增/更新操作自定义外键字段存储非id值如何实现
实现方案
1 调整CrudController字段配置
在你的Unit字段定义中添加value参数指定外键表要存的字段即可,示例代码如下:
CRUD::field('unit') ->label('Unit') ->type('select') ->entity('unit') // 替换为你模型中定义的关联方法名 ->model(\App\Models\Unit::class) // 替换为你的外键表对应模型路径 ->attribute('name') // 下拉框对外展示的字段 ->value('name'); // 指定保存时取外键表的name字段值存入当前模型的unit字段
2 调整模型关联定义(配置了关联时需要)
如果你在主模型中定义了和Unit表的关联,需要修改关联参数指定匹配字段为name,而非默认的id:
// 你的主模型文件中 public function unit() { // 第二个参数为当前表存储关联值的字段名,第三个参数为外键表匹配的字段名 return $this->belongsTo(\App\Models\Unit::class, 'unit', 'name'); }
3 注意事项
- 请确保外键表的
name字段为唯一值,避免后续关联查询匹配出错 - 请确保当前表的
unit字段类型、长度和外键表的name字段完全一致,避免存值时被截断 - 可在表单验证规则中添加
exists:units,name规则,校验提交的Unit值在外键表中真实存在
内容的提问来源于stack exchange,提问作者Wilyanto Liang
相关产品推荐
相关产品推荐

