Почему дополнительные ограничения запроса в «уникальном правиле проверки» создаются с закрытием в Laravel Документация? - PullRequest
0 голосов
/ 16 февраля 2020

Я имею в виду https://laravel.com/docs/6.x/validation#rule -уникальный , раздел Добавление дополнительных предложений Where .

В примере документации дополнительный запрос возвращается в закрытие:

'email' => Rule::unique('users')->where(function ($query) {
    return $query->where('account_id', 1);
})

В моем приложении я проверяю свой запрос следующим образом:

$request->validate([
    'display_name' => [
        'required',
        'string',
        'between:3,32',
        Rule::unique('devices')->where(function ($query) {
            return $query->where('user_id', auth()->id());
        })
    ],
    // ...
]);

Если я опускаю закрытие, мой код все еще работает, как и ожидалось:

$request->validate([
    'display_name' => [
        'required',
        'string',
        'between:3,32',
        Rule::unique('devices')->where('user_id', auth()->id())
    ],
    // ...
]);

Есть ли особая причина для использования замыкания, как в примере?

1 Ответ

1 голос
/ 16 февраля 2020

Я очень сомневаюсь, что это имеет значение. Похоже, что метод Rule::unique() возвращает объект Query \ Builder (основа для Eloquent) с предварительно сгенерированным базовым запросом SELECT DISTINCT ? FROM devices. В этот момент вы взаимодействуете с ним как с обычным объектом Builder. И Builder::where() предлагает любой синтаксис, который вы там используете.

Когда вы задаете замыкание вместо аргументов поля / (оператора) / значения, результирующие условия запроса помещаются в скобки. Таким образом, вы можете делать такие вещи, как SELECT DISTINCT ? FROM devices WHERE ? OR (? AND ?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...