php - Laravel:如何处理表单中的重复数据
问题描述
在我的项目中,我必须以多对多关系链接两个不同的模型(A
和),并使用具有附加字段(和)以及模型的数据透视表。B
additionaldata1
additionaldata2
id
我的方法是创建一个表,其中每一行都是一个不同的B
条目,并且用户可以为他/她想要与该条目链接的条目添加附加数据A
(从 URL 已知myproject/A/{A_id}/linkwithB/
)。
表格的每一行都包含几个输入字段,类似于:
<input type="number"
name="data[{{ $B->id }}][additionaldata1]"
value={{ $A->isLinkedWith($B) ? $A->getB($B)->pivot->additionaldata1 : '' }}>
<input type="number"
name="data[{{ $B->id }}][additionaldata2]"
value={{ $A->isLinkedWith($B) ? $A->getB($B)->pivot->additionaldata2 : '' }}>
isLinkedWith
和getB
是模型中的两个内部方法,A
它们告诉我是否$B
已经与 链接,如果是,则检索和$A
的值。additionaldata1
additionaldata2
服务器端,我收到一个数组
AB: [
B_id_1 => ['additionaldata1': ad1Value, 'additionaldata2': ad2Value],
B_id_2 => ['additionaldata1': ad1Value, 'additionaldata2': ad2Value],
]
这是我所期望的,但我仍然面临两个不同的问题。
Null
对比0
additionaldata*
我从表单收到的字段被设置为null
用户不提供它们时,从而将事情分解到数据库中,其中相应的字段没有设置为nullable
(我希望它保持这种方式)。
我想将那些null
s 更改为0
s,为此我尝试覆盖prepareForValidation
自定义ABFormRequest
类中的函数,但由于数据以数组形式出现,因此我无法使用该$request->merge
方法,因为我的字段不是t 在请求的“顶级”级别。
验证
在整个视图中,我设置了验证错误反馈,包括
@if($errors->has('additionaldata1'))
<p class="help is-danger">{{ $errors->first('additionaldata1') }}</p>
@endif
在每个input
字段之后。问题是所有字段都被调用additionaldata*
(尽管与不同B
的 s 相关),最终会显示为每个字段显示的错误反馈,即使是那些实际上有效的字段。
首先,如果你已经走到这一步,我谢谢你。
其次,没有什么是写在石头上的,如果您对不同的方法有建议,我可以把所有东西都扔掉并以不同的方式重建它,但我想知道我是否在做一些完全无用的事情,或者它怎么可能改善。
解决方案
推荐阅读
- javascript - 显示带有通用组件的 Mat 对话框
- python - ValueError: int() 以 10 为底的无效文字;试图从浮点数中提取整数
- terraform - 如何向外部发送资源模块的块
- file-upload - 无法将文件附件上传到 IIS 上的 phpBB3 论坛
- mongodb - MongoDB 更改流:我可以在更新/删除之前获得价值吗?
- vue.js - 双击样式为“-webkit-app-region:drag;”的元素 最大化窗口会导致“最大化”按钮不改变的错误
- spring-boot - Hystrix javanica缓存和JCache
- python - 无法在 Qt 设计器(macos)中显示自定义 PyQt5 小部件插件
- css - 如何在不使用 styleSheet 原生元素的情况下将 CSS 文件添加到 react-native 应用程序中
- discord.js - 如何创建命令创建角色 | 不和谐机器人