Laravelで配列のバリデーションルールにおいて、少なくとも1つの値がtrueである必要がある方法


  1. バリデーションルールの作成: まず、バリデーションルールを作成します。これは、Validatorクラスのmakeメソッドを使用して行います。
$validator = Validator::make($request->all(), [
    'array_field.*' => 'required|boolean'
]);

上記のコードでは、array_fieldという名前の配列フィールドをバリデートしています。*を使用することで、配列の各要素が個別にバリデートされることを指定しています。requiredルールは、要素が存在していることを確認し、booleanルールは、要素が真偽値であることを確認します。

  1. カスタムバリデーションルールの作成: 上記のバリデーションルールだけでは、少なくとも1つの値がtrueであることを確認することはできません。そのため、カスタムバリデーションルールを作成する必要があります。

app/RulesディレクトリにAtLeastOneTrue.phpという名前のファイルを作成し、以下のようなルールクラスを作成します。

namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class AtLeastOneTrue implements Rule
{
    public function passes($attribute, $value)
    {
        return in_array(true, $value);
    }
    public function message()
    {
        return '少なくとも1つの値はtrueである必要があります。';
    }
}
  1. バリデーションルールの適用: 作成したカスタムバリデーションルールを使用して、配列のバリデーションルールに少なくとも1つの値がtrueであることを確認します。
$validator = Validator::make($request->all(), [
    'array_field.*' => ['required', 'boolean', new \App\Rules\AtLeastOneTrue]
]);

上記のコードでは、new \App\Rules\AtLeastOneTrueをルールの配列に追加しています。これにより、カスタムバリデーションルールが適用されます。

以上が、Laravelで配列のバリデーションルールにおいて、少なくとも1つの値がtrueである必要がある方法です。これにより、要件を満たさない場合にはバリデーションエラーメッセージが表示されるようになります。