Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 02.06.2017 13:13:30

Уникальные поля и валидация

Подскажите пожалуйста кто сталкивался. Есть таблицы:

T1
id
t2_id
t3_id

T2
id
name

Поля t2_id и t3_id в связке пометил как уникальные  $table->unique(['t2_id ', 't3_id ']);

Как сделать валидацию на уникальность, только при условии что я заместо t2_id использую name при добавлении в T1. То есть поля t2_id у меня нет.

Изменено z3r9 (02.06.2017 13:14:36)

Не в сети

#2 02.06.2017 15:32:11

Engineer
Откуда: Эстония
Сообщений: 4

Re: Уникальные поля и валидация

Если поля должны быть уникальны в связке, то получается что и валидацию надо делать одновременно по обоим полям — t2_id и t3_id.
Насколько я понял, для t2_id берется значение из поля формы «name». А откуда берется значение для t3_id?

Для валидации одного поля на уникальность с разными названиями на форме и в таблице, достаточно добавить имя поля из таблицы к правилу unique:

PHP
'name' => 'unique:T1,t2_id'

Не в сети

#3 03.06.2017 03:17:07

Re: Уникальные поля и валидация

t3_id просто передается по ссылке. Я пока сделал так:
Проверяю name по t2_id на существование валидацией.
Потом получаю по name t2_id (T2 id). T2::select('id')->where(...);
Далее еще раз запускаю валидатор на unique по полям t2_id и t3_id. Просто думал может можно одним валидатором обойтись.

Изменено z3r9 (03.06.2017 03:18:30)

Не в сети

#4 03.06.2017 11:43:14

Engineer
Откуда: Эстония
Сообщений: 4

Re: Уникальные поля и валидация

Я бы попробывал использовать такое правило, может сработает:

PHP
'name' => [
    
'required',
    
Rule::unique('T1','t2_id')->where(function ($query) {
        
$query->where('t3_id'$t3_id_value);
    })
]

name — имя поля на форме
$t3_id_value — сюда идет значение, которое надо проверить для поля t3_id.

PS:При использовании конструктора правил Rule, правила в валидатор передаются не строкой, а массивом.

Не в сети

#5 03.06.2017 17:46:34

Re: Уникальные поля и валидация

Engineer, нет, так не срабатывает.

Не в сети

Подвал раздела