LoginSignup
9
11

More than 5 years have passed since last update.

Laravel5のユニークバリデーション

Last updated at Posted at 2015-02-19

Laravelでのユニークバリデーションルールは、
例えばpersonsモデルのemailを例にとると、以下のようになりますね。

['email' => 'unique:persons']

更にupdate時は、

['email' => "unique:persons,email,$id"]

のようにidを指定して、このidは対象外とします。
※これをしないと更新対象データ自身も検索対象になってしまうので、
必ずユニーク違反になってしまいます。

Laravel4の場合は、
RESTful Resource Controllerであればupdateアクションの引数でidを取得できるので、
それをセットすれば問題はありません。

ところが、Laravel5のFormRequestのrulesメソッド内に記述する場合は
どうすればよいのか悩みました。

そこで色々調べた結果、現在はidを以下のように取得しています。

\Route::getCurrentRoute()->getParameter('persons')

※この'persons'はルーティングの{resouce}に当たる部分です。

もっと良い方法をご存知の方がいらっしゃいましたら、
是非教えていただけると嬉しいです。

ちなみにですが、複合フィールドにまたがるユニークバリデーションについて、
良いパッケージをみつけましたのでご紹介させていただきます。

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

[2015.03.09 追記]
上記パッケージですが、論理削除に対応していないようです。
何とも残念です…。

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11