Laravel Backpack一对一关联同名字段如何仅显示一次同步存两张表
实现步骤
1. 调整字段配置,仅保留一个输入框
删掉原来的两个重复字段定义,仅保留主表对应的new_title字段即可:
CRUD::addField([ 'label' => "Title", 'type' => 'text', 'name' => 'new_title', ]);
2. 新增保存后回调,同步字段值到关联表
在当前CRUD控制器的setupCreateOperation和setupUpdateOperation方法中按需添加(创建和更新操作都需要同步就两个方法都加,仅创建时需要同步就只加在创建操作中)保存后钩子:
// 表单提交、主表记录保存完成后触发 CRUD::afterSave(function ($entry) { // 关联记录不存在时先创建关联 if (empty($entry->achive)) { $entry->achive()->create([ 'new_title' => $entry->new_title, // 关联表其他必填字段可在此处补充赋值 ]); return; } // 关联记录已存在时直接更新字段值 $entry->achive->update([ 'new_title' => $entry->new_title ]); });
注意事项
- 确保关联模型
Achive的$fillable属性中已加入new_title字段,避免触发批量赋值报错 - 代码中关联名称
achive需要和你模型里定义的hasOne关联方法名完全一致
内容的提问来源于stack exchange,提问作者Lê Mạnh Linh
相关产品推荐
相关产品推荐

