具有相同列名

时间:2016-03-04 10:26:26

标签: php validation laravel laravel-5.2

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

简化表格和模型:

用户

上有一个列'名称'
class User extends Model {

     protected $fillable = ['name'];

     public static function rules() {
        return [
            'name'     => 'required|unique:users',
        ];
     }
}

兄弟

上有一个列'name'
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. 如何更改控制器或表单名称属性以消除此问题。
  3. 旁注:
    我不使用laravelcollective / html,所以没有它的答案会更好,但如果它确实大大简化了解决方案的过程,那么我可能会考虑它。

    更新
    有没有办法使用预先加载或类似的方法直接保存POST元素而不重新分配它们?我正在拍摄一些内容,例如将字段名称设置为name="user.name"name="sibling.name",laravel会自动识别。

1 个答案:

答案 0 :(得分:0)

我只想更改rules数组中的键。

//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();