0

routing_idが与えられた行でaddressが一意であるかどうかを確認する検証ルールを作成する必要があります。それは簡単です。しかし、場合によってはrouting_idフィールドがNULLである可能性があり、次に妥当性検査リクエストルールが機能しません。ここでララール検証 - nullableでユニークです

は私のルールです:

$rules['address'] = 'required|ip|unique:vias,address'.\Route::current()->getParameter('via')->id.',id,routing_id,'.request()->input('routing_id')); 

私は私のPOST配列にrouting_idとしてnullで行にパッチを適用しています私は私のaddressがゼロにrouting_idフィールドを持つすべての行内で一意になりたいです。しかし、それは動作しません。

私の質問です:どのようにそれを解決するには?

+0

なぜあなたはこれを連結しましたか? 'address '。\ Route :: current() - > getParameter(' via ') - > id.''2番目はL5.4を使用していますか? – Digitlimit

+0

ユニークなルールの必要性:テーブル( 'vias')、カラム(' address')、パッチ適用時に無視されるID( '\ Route :: current() - > getParameter( 'via') - > id')、 idカラム( 'id')を追加し、次に条件を追加します:それで' routing_id'は与えられた 'routing_id'ポスト値と等しくなります。 (プロジェクトはL5.3を使ってビルドされましたが、まだ5.4に更新されていませんでした) – piotr

+0

覚えておいてください:unique:table、column、except、idColumn その場合は次のようにしてください: '$ routing_id = \ Route :: current() - > getParameter( 'via') - > id; "必須| ip |ユニーク:ビア、アドレス、{$ルーティング_ ID}、ルーティング_ID" – Digitlimit

答えて

0

研究の数時間後、私は最終的にどこに問題があるかを見出しました。

Laravelで実装されたStore Request Validationを使用すると、POSTされたパラメータを変更できます。私の上に掲示私の検証ルールではリクエストパラメータ、私が変更されていないこれらのFRESHコピーを取得した

request()->input('routing_id') 

を持っていました。だから私の NULLの値が使われなかったのです - なぜなら私は条件付きでいくつかの特別な値を NULLの値でマージしていたからです。

Paramsは正しく変更されましたが、StoreRequestValidationクラス内でのみ変更されました。

関連する問題