两个
表中的相同列名在验证过程中存在冲突。
简化的表格和模型:
表用户上有一列"名称"
class User extends Model {
protected $fillable = ['name'];
public static function rules() {
return [
'name' => 'required|unique:users',
];
}
}
表同级上有一列"名称"
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会自动识别。
我只会更改规则数组中的键。
//User Model
return [
'user_name' => 'required|unique:users',
]
//Sibling Model
return [
'sibling_name' => 'required',
];
在我的 HTML 中
<!-- User Name -->
<input type="text" class="form-control" name="user_name"/>
<!-- Sibling Name -->
<input type="text" class="form-control" name="sibling_name"/>
希望这有帮助。
更新
您无需更改数据库中的列名。
以下是保存模型的方法。
// Method to create User and Sibling
// Create User.
$user = new User;
$user->name = $request->user_name;
$user->save();
//Create Sibling.
$sibling = new Sibling;
$sibling->name = $request->sibling_name;
// Associate User with Sibling
$sibling->save();