1
验证过程中两个表中的相同列名相冲突。多个具有相同列名的模型的表单验证
简表和模型:
有上表是一列 '名称' 用户对表
有一栏 '名称' 兄弟姐妹
class Sibling extends Model {
protected $fillable = ['name'];
public static function rules() {
return [
'name' => 'required',
];
}
}
从视图形式的一部分:
<div class="form-group">
<label class="col-md-2 control-label" for="name">User Name</label>
<div class="col-md-10">
<input type="text" class="form-control" name="name"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="name">Sibling Name</label>
<div class="col-md-10">
<input type="text" class="form-control" name="name"/>
</div>
</div>
剥去控制器功能:
public function store(Request $request){
$userValidation = $this->validate($request, User::rules());
$siblingValidation = $this->validate($request, Sibling::rules());
$user = new User();
$user->create($request);
$sibling = new Sibling;
$sibling->create($request);
}
显然改变数据库列名不一样会工作。
我的问题:
- 什么是解决这个问题的常见的方法?
- 如何更改控制器或表单名称属性以消除此问题。
附注:
我不使用laravelcollective/HTML,所以没有它的答案将是可取的,但如果它确实大大简化解决方案的过程,然后我可能会考虑它。
更新:
是否有使用预先加载或类似的直接保存POST元素,而无需重新分配他们的方法吗?我正在成像诸如将字段名称设置为name="user.name"
和name="sibling.name"
,laravel会自动识别。
这意味着我将不得不相应地更改数据库列名称,对吧?或者如果Laravel处于这种模式,它会自动识别它吗? '$ user-> save()' – MPS
不,你不需要改变列名。 Laravel验证发生在窗体的'name'属性上,而不是列名上。更新了答案以显示如何保存这些值。 – Dwijen
我明白了,所以它只是简单的PHP,我必须重新分配。在这种情况下,没有办法进行急切的加载或这样可以节省我的重新分配代码。所以以下将不可能: '$ user-> save($ request) $ sibling-> save($ request)' 谢谢。 我会尽量更新我的问题。 – MPS