Проверять уникальный () только на принадлежащих моделях - PullRequest
0 голосов
/ 08 ноября 2018

Допустим, у меня есть модель User и модель Brand с отношением один-ко-многим между ними:

Модель пользователя:

public function brands()
{
    return $this->hasMany(\App\Brand::class);
}

Это означает, что разные пользователи могут иметь разные бренды с одинаковым именем без конфликта.

Теперь я хочу создать правило проверки для создания брендов, но ТОЛЬКО для брендов, принадлежащих пользователю, таким образом, чтобы у пользователя не было двух брендов с одинаковым именем.

Как я могу это сделать?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

, если вы хотите сделать это в части модели / хранилища, просто запустите

$exists = (bool)$user->brands()->where('name', '=', $newBrandName)->count();

если $exists верно, вы запрещаете ему добавлять новый бренд, так как используется имя

если вы хотите сделать это в части валидатора, используйте правило

'name' => Rule::unique('brands')->where(function ($query) {
    return $query->where('user_id', auth()->id());
})

будь осторожен со скрытой зависимостью.

0 голосов
/ 08 ноября 2018

Что я нашел в Документ Laravel

Validator::make($data, [
    'name' => Rule::unique('brands')->where(function ($query) {
        return $query->where('user_id', $user_id);
    })
]);
0 голосов
/ 08 ноября 2018

Вы можете сделать что-то вроде этого:

public function rules()
{
    $user = \Auth::user(); // get the user

    return [
        'name' => [
            Rule::unique('brands')->where(function ($query) use ($user) {
                $query->where('user_id', $user->id);
            }),
        ],
    ];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...