フォームリクエストバリデーションでuniqueの除外IDを指定する方法はこちら

実装しているとたまに表題の現象が発生して、見た感じパラメータも間違ってないのになんでだろう?ってなることがあったのでメモ。

結論を先に書くと、ルートパラメータとinputパラメータのパラメータ名が重複しているのが原因でした。

例えばIPアドレスを管理するとして、ip_addressesテーブルにip_addressカラムがあるとします。(その他のカラムは省略)
これを Route::resource(‘ip_addresses’, ‘IpAddressController’) なルーティングにした場合、フォームリクエストバリデーションでuniqueの除外IDに指定するパラメータ $this->ip_addressに入っているのはルートパラメータではなく、フォームのip_addressの入力値となります。(上記リンク参照)

解決策としては、ルーティングを以下のように変更してルートパラメータ名を変更する方法があります。

Route::resource('ip_addresses', 'IpAddressController')->parameters([
    'ip_addresses' => 'ipAddress',
]);

これでフォームリクエストバリデーションでuniqueの除外IDに指定するパラメータを $this->ipAddress にすれば有効になります。