2017-09-29 26 views
1

使用Laravel 5.4,我的用戶有一個自動完成的幫助器來將值輸入到輸入中。我想驗證插入時每個值都存在於數據庫中。驗證每個逗號分隔值是否存在於數據庫中?

爲「單位」輸入值「12,13,14」

如何檢查,單位「12」和單位「13」和單位「14」存在於數據庫做插入前?

$units = array_filter(array_unique(explode(",", $request->unit))); 
// input "12,13,14" becomes [12,13,14] 

$this->validate($request,[ 
     'unit' => 'required|exists:units.id,'.$units, 
]); 

我必須使用自定義的驗證規則,或確實laravel有一些方便的像「需要| existsAllValuesInThisArray」八九不離十的事情嗎?在有關它的文檔中沒有找到任何東西。


我也發現這個,但它是用於像多個選擇字段或複選框從它的外觀sorta事情。

$validator = Validator::make($request->all(), [ 
    'person.*.email' => 'email|unique:users', 
    'person.*.first_name' => 'required_with:person.*.last_name', 
]); 

更新:我結束了使用javascript發送它關閉處理之前分割輸入到一個數組。所以我的輸入名稱變成了「單位[]」而不是「單位」

+0

我認爲你有兩種可能的方法:在js中修改你的輸入併發送給服務器一個數組,使用你發佈的第二個片段驗證並使用自定義驗證規則 – gbalduzzi

+1

嘗試'$ this-> validate($ request, [。單位。*'=>'必需存在:units.id,'。$ units, ]);'。由於'$ units'是一個數組,因此規則'unit。*'應該檢查數組中的每個元素。 –

+0

@JoséA.Zapata,你的回答是正確的。你可以發佈嗎? – Darius

回答

1

嘗試以下操作:

$this->validate($request,[ 'unit.*' => 'required|exists:units.id,'.$units, ]); 

由於$units是一個數組,該規則unit.*應檢查數組的每個元素。

相關問題