Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Подскажите пожалуйста кто сталкивался. Есть таблицы:
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)
Не в сети
Если поля должны быть уникальны в связке, то получается что и валидацию надо делать одновременно по обоим полям — t2_id и t3_id.
Насколько я понял, для t2_id берется значение из поля формы «name». А откуда берется значение для t3_id?
Для валидации одного поля на уникальность с разными названиями на форме и в таблице, достаточно добавить имя поля из таблицы к правилу unique:
'name' => 'unique:T1,t2_id'
Не в сети
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)
Не в сети
Я бы попробывал использовать такое правило, может сработает:
'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, правила в валидатор передаются не строкой, а массивом.
Не в сети
Engineer, нет, так не срабатывает.
Не в сети
Страницы 1