2016-11-18 10 views
1

私はフォームの検証を実行しています。ユーザーは値の範囲を選択することができます(モデル内のエントリの集合に基づいて)Laravel:モデルの属性の値に応じてフォームフィールドを検証する方法は?

たとえば、 )

CfgLocale-> listofAvailableIds(::私はモデルCfgLocale(ID、名前を)持っている

私のようなものを持っていると思い

内側:私は何

がある配列を返しますモデルこの方法:私は、その後どうなるの検証のためのコントローラ上の

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; 
    } 
} 

$this->validate($request, [ 
    'id'    => 'required|integer|min:1', 
    ... 
    'locale' => 'required|in:'.implode(',', CfgLocale::availableid()), 
]); 

これ以上のアイデアやLaravelの標準はありませんか?

おかげ

答えて

2

あなたは以下のように検証ルールを定義することができlaravel.Youのexists ruleを使用することができます。これが助けになるかもしれないかもしれません。

'locale' => 'exists:cfg_locales,id' 
+0

これは私が欠けていたものです。ありがとう。とにかく、テーブル名の代わりにモデルを参照することができれば、よりスタイリッシュでしっかりしたものになると思います.... – koalaok

1

使用代わりに、このコードは、

class CfgLocale extends Model 
{ 
    protected $table = 'cfg_locales'; 

    public static function availableid() 
    { 
     return $this->pluck('id')->toArray(); 
    } 
} 

pluck方法は、あなたのテーブルからid列を選択し、toArray方法はarrayにモデルobject collectionを変換します。

詳しくはLaravel Collectionshereをご確認ください。

関連する問題