2016-03-04 104 views
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); 
} 

显然改变数据库列名不一样会工作。

我的问题:

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

附注:
我不使用laravelcollective/HTML,所以没有它的答案将是可取的,但如果它确实大大简化解决方案的过程,然后我可能会考虑它。

更新:
是否有使用预先加载或类似的直接保存POST元素,而无需重新分配他们的方法吗?我正在成像诸如将字段名称设置为name="user.name"name="sibling.name",laravel会自动识别。

回答

0

我只是改变规则数组中的键。

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

这意味着我将不得不相应地更改数据库列名称,对吧?或者如果Laravel处于这种模式,它会自动识别它吗? '$ user-> save()' – MPS

+0

不,你不需要改变列名。 Laravel验证发生在窗体的'name'属性上,而不是列名上。更新了答案以显示如何保存这些值。 – Dwijen

+0

我明白了,所以它只是简单的PHP,我必须重新分配。在这种情况下,没有办法进行急切的加载或这样可以节省我的重新分配代码。所以以下将不可能: '$ user-> save($ request) $ sibling-> save($ request)' 谢谢。 我会尽量更新我的问题。 – MPS

相关问题