2016-03-04 132 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

相關問題