具有相同列名的多个模型的表单验证


Form Validation for multiple Models with same column names

两个

表中的相同列名在验证过程中存在冲突。

简化的表格和模型:

用户上有一列"名称"

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);
}

显然,将数据库列名称更改为不同是可行的。

我的问题:

  1. 解决此问题的常见方法是什么?
  2. 如何更改控制器或窗体名称属性以消除此问题。

旁注:
我不使用 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();