我正在对表单进行验证,用户可以在其中选择一系列值(基于模型中的一组条目)
E.g。我有Model CfgLocale(id,name)
我希望有类似的东西:
CfgLocale-> listofAvailableIds():返回一个数组
我做的是:
Inside Model这个方法:
class CfgLocale extends Model
{
protected $table = 'cfg_locales';
public static function availableid()
{
$id_list = [];
$res = self::select('id')->get();
foreach($res as $i){
$id_list[] = $i->id;
}
return $id_list;
}
}
在Controller上进行验证我会这样做:
$this->validate($request, [
'id' => 'required|integer|min:1',
...
'locale' => 'required|in:'.implode(',', CfgLocale::availableid()),
]);
有没有更好的创意或Laravel标准来完成这项工作?
由于
答案 0 :(得分:2)
您可以使用exists rule laravel。您可以定义验证规则,如下所示。可能会有所帮助。
'locale' => 'exists:cfg_locales,id'
答案 1 :(得分:1)
请改用此代码,
class CfgLocale extends Model
{
protected $table = 'cfg_locales';
public static function availableid()
{
return $this->pluck('id')->toArray();
}
}
pluck
方法从您的表格中选择id
列,toArray
方法将您的模型object collection
转换为array
。
了解Laravel Collections
here的更多信息。
答案 2 :(得分:0)
这将返回一组ID:
public static function availableid()
{
return $this->pluck('id')->toArray();
}
https://laravel.com/docs/5.3/collections#method-pluck https://laravel.com/docs/5.3/collections#method-toarray