How do I use OR in laravel validate?

Viewed 86

there is a form with a select field "state", the value of which must be "draft" or "published". how to do it? does not work now.

$this->validate($request, [
    'name' => 'required|unique:article_categories' . $category->id,
    'description' => 'required|min:200',
    'state' => 'draft' || 'published'
]);
2 Answers

you have to use Rule::in([])

$this->validate($request, [
    'name' => 'required|unique:article_categories' . $category->id,
    'description' => 'required|min:200',
    'state' => [
        'required',
        Rule::in(['draft', 'published']),
    ]
]);

Is see you have answered your own question, but just to add to it: 'draft' || 'published' evaluated in PHP as true.

Meaning you are actually doing this:

$this->validate($request, [
    ....
    'state' => true
]);

which makes no sense in terms of what is expected in the validation rules.

The correct way to do this is as you said:

$this->validate($request, [
    ...
    'state' => [
        'required',
        Rule::in(['draft', 'published']),
    ]
]);
Related