Подтвердите Nova на нескольких уникальных полях - PullRequest
0 голосов
/ 14 января 2019

Я создал ресурс Nova, базовая модель которого ссылается на себя как на родителя. Мне нужно правило проверки, где текст уникален для каждого родительского идентификатора.

id  text  parent_id
1   A     NULL
2   B     NULL
3   C     NULL
4   D     1
5   E     1
6   F     2

Итак, если я хочу создать новый элемент с text:C, parent_id:NULL, я не могу, потому что id:3 уже имеет text:C, parent_id:NULL.

Если я хочу обновить текст id:5 до D, я не могу, потому что id:4 уже имеет text:D, parent_id:1.

Кажется, что нет способа получить доступ к базе данных из правила проверки.

Я пытался создать правило, затем получить route(), но он возвращает Illuminate\Http\Request, а не Laravel\Nova\Http\Requests\NovaRequest, из которого я смог бы получить базовую модель, а затем построить запрос .

Как я могу проверить сложные правила, подобные этим, для базы данных?

1 Ответ

0 голосов
/ 14 января 2019

Попробуйте следующее:

public function fields(Request $request)
{
    return [
        Text::make('Text')
            ->rules(Rule::unique('tablename')->where(function ($query) use($request) {

                return $query->where('text', $request->text)
                    ->where('parent_id', $request->parent_id);
        })),
        ...
    ]
}
...