2016-12-03 31 views
0

プライバシーをパブリックにすると、すべてのユーザーが一意のタイトルを持ちますがプライバシ=プライベートで、すべてのユーザーが一意のタイトルを持つ場合、テーブルを検証します。Laravelの条件付きバリデーション

--------------------------- 
user_id | title | privacy 
--------------------------- 
    2 | hello | public 
--------------------------- 
    2 | hello | private 
--------------------------- 
    2 | hello | private **Error** 
--------------------------- 
    2 | hello | public **Error** 
--------------------------- 
    3 | hello | public **Error** 
--------------------------- 
    3 | hello | private 
--------------------------- 
+0

これまで行ってきたことについてコードを書くことができますか? –

答えて

0

ちょっと私は私を助けるか、誰もが主に自分のソリューションのように私に

を示唆 感謝!試みる多くの後、私の質問を解決することができ

 'title' => Rule::unique('galleries')->where(function ($query) 
     { 
      if($this->input('privacy')=='private') 
      { 
       $query->where([['privacy','=','private'],['user_id','=',Auth::user()->id]]); 
      } 
      else 
       $query->where('privacy', '=','public'); 

     }), 

うまくいけば、これが最も簡単な解決策

があります
1

はあなたがバリデータ自体に実行したい場合は、このライブラリを使用することができるかもしれませ

URL:https://github.com/felixkiss/uniquewith-validator

代替ソリューション:

if($request->privacy == "private"){ 
    $count = DB::table('your_table_name') 
       ->where('title','=',$request->title) 
       ->where('user_id','=,$request->user_id) 
       ->count(); 
    if($count >0){ 
     return "You error message for privacy private" 
    } 
}else{ 
    $count = DB::table('your_table_name') 
       ->where('title','=',$request->title) 
       ->count(); 
    if($count >0){ 
     return "You error message for privacy public" 
    } 

} 

望みあなたはこの単純なコードを理解して。疑いがあれば質問してください。

あなたは基本的に使用されます。このため、カスタムバリデータを、必要になります
+0

laravelでデフォルトの検証システムを使用する方法はありますか –

1

内蔵のプライバシーの条件に基づいて独自のルール:

class CustomValidator extends Illuminate\Validation\Validator 
{ 
    public function validateUniqueIfPrivacy($attribute, $value, $parameters) { 

     $privacyValue = array_get($validator->getData(), 'privacy_field'); 

     if ($privacyValue == 'private') { 
     return $isTitleUniqueForUser = $this->validateUnique($attribute, $value, 'my_table', 'title', NULL, 'user_id', $parameters[0]); 
     } else { 
     return $isTitleUniqueForAll = $this->validateUnique($attribute, $value, 'my_table', 'title'); 
     } 

    } 
} 

カスタムバリデータを登録し、そのクラスを自動的にロードした後は、することができますパラメータとしてのみ$userIdを渡すことによって、このようにそれを使用する:カスタムバリデータを実装する方法について

$rules = array(
     'title' => 'unique_if_privacy:,' . $user->id, 
); 

詳細情報:Laravel 4.2 documentation(Laravel 5のためにも利用可能)

を210
関連する問題