2016-08-18 15 views
1

Laravel 5.2アプリケーションで必要とされる固有のバリデーターを、特定のuser_idのテーブル結果のみに対して 'slug'列の一意性をチェックするように制限しようとしています。言い換えれば、スラッグはユニークである必要がありますが、ユーザー単位でのみ必要です。私はstore()関数のために、次のコードで働いています:Laravel 5.2 Validator:特定のユーザーに固有のフィールドチェックを制限する

'slug' => 'required|unique:contents,slug,NULL,id,user_id,' . Auth::id() 

それはうまく動作します。しかし、私はupdate()関数を同じように動作させることはできません。なぜなら、現在更新されているエントリの結果に対して一意のチェックを止めるバリデータを取得できないからです。私は現在使用しているコードは次のとおりです。

'slug' => 'required|unique:contents,slug,' . $content->slug . ',id,user_id,' . Auth::id() 

コードは、右の私には見えませんが、私はいくつかのバリエーションを試したし、それらのどれも私が望むどのように動作しないこと。私の考えでは、これはうまくいくと思います。

'slug' => 'required|unique:contents,id,' . $content->id . ',user_id,' . Auth::id() 

しかし、そうではありません。誰か私の問題がここに何であるか知っていますか?どんな指導も大歓迎です。

+0

を、あなたはあなたではなく、 '$のContentより' $のContent> slug'を、持っていることを知っています> id'?その小さなエラー以外は、私は2番目のコードが動作することを期待します – Jonathon

+0

ええ、私は2番目の行が正しいと思わなかった、3番目の行: 'slug' => 'required | unique:contents、id、' 。 $ content-> id。 '、id、user_id、'。 Auth :: id()は動作すると期待されていますが、動作しません。それは私がそのユーザーのために既に存在するものにスラグをアップデートすることを可能にする。 – Boone

+0

最後のコード行に '、id'がありません。おそらくそれが動作しない理由です。試してください: ''必須|固有:コンテンツ、id、'。 $ content-> id。 '、id、user_id、'。 Auth :: id() ' – Jonathon

答えて

6

モデルの実際の属性名を知らなくても正しい答えを出すのは難しいです。

{0}検証をスキップする{0}

{2}行の= ID値を検証さ

{1} =列名を検証さ=テーブル名:バリデータは、次のパラメータ

unique:{0},{1},{2},{3},{4},{5} 

サポート

だから、追加のフィルタ列

用= {0}

{4}の主キー列の名前= {0}

{5}で追加のフィルタ列の名前=値、{1}、我々は明確に{0}の値を持っているようです、{2}および{5}。あなたの質問情報から、{3}{4}の正しい値が何であるかわかりません。私は推測を取ることだった場合、私はこのようなバリデータルール記述します。コードの第2ビットで

'slug' => 'required|unique:contents,slug,' . $content->id . ',id,user_id,' . Auth::id() 
+0

バリデータのparam定義をありがとうございました。私はLaravelのサイトでさえ、どこにいても見たことがありませんでした。わかった。再度、感謝します! – Boone

関連する問題