やりたいこと1
保存(store)、更新時(update)のメソッドで、バリデーションルールを追加すると思いますが、uniqueなどを使うときに、新規登録時と更新時で振り分けたい場合があります。
その場合に、必須チェックなど共有したいルールもあり、別のバリデーションを用意するのはちょっとなぁ...というときに使えます。
現在のルーティングによって分岐する方法
public function rules() {
$route = $this->route()->getName();
\Log::info($route);
}
user.store
などが返ってきます。
フォームの入力値を取得して分岐する方法
public function rules() {
$postId = $this->id;
$userId = $this->user_id;
}
$this
で取れます!
更新時のみidがあるという作りであれば、こちらで分岐してもよいと思います。
やりたいこと2
テーブル内で名前などを一意にしたい
やりたいこと1の分岐と組み合わせて使います。
新規登録時は、他のレコードと重複していてはいけない。
更新時は、自分のレコードとは重複していていいが、他のレコードと重複していてはいけない。
かつ、ソフトデリートも考慮。
<?php
public function rules()
{
if(isset($this->seminarId)) {
$countRule = Rule::unique('seminars', 'count')->whereNull('deleted_at')->whereNot('id', $this->seminarId);
} else {
$countRule = Rule::unique('seminars', 'count')->whereNull('deleted_at');
}
}
$rules = [
'count' => ['required', 'numeric', $countRule],
];