Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Я бы попробывал использовать такое правило, может сработает:
'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, правила в валидатор передаются не строкой, а массивом.
Если поля должны быть уникальны в связке, то получается что и валидацию надо делать одновременно по обоим полям — t2_id и t3_id.
Насколько я понял, для t2_id берется значение из поля формы «name». А откуда берется значение для t3_id?
Для валидации одного поля на уникальность с разными названиями на форме и в таблице, достаточно добавить имя поля из таблицы к правилу unique:
'name' => 'unique:T1,t2_id'
Laravel: 5.4.24
MySQL: 5.7.17 (InnoDB)
Привет всем! Посмотрел описание работы с транзакциями в документации Laravel. Там подробно расписано как действовать, взаимодействуя с БД через фасад DB, но примеров использования транзакций с Eloquent ORM там не нашел. Указано только, что с ним тоже можно работать, используя инструменты DB фасада.
Попробывал набросать код, следуя интуиции:
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
$user = null;
try{
DB::beginTransaction();
// Create a user record
$user = User::create([
'name' => $data['reg_fname'].' '.$data['reg_lname'],
'email' => $data['reg_email'],
'password' => bcrypt($data['reg_password']),
]);
// Add a profile to the user
$user->profile()->save(new UserProfile([
'fname' => $data['reg_fname'],
'lname' => $data['reg_lname']
]));
DB::commit();
} catch(\Exception $exception){
DB::rollBack();
// Allow Laravel engine to handle this exception
throw $exception;
}
return $user;
}
Тут создается сначала запись в таблице users, а затем добавляется запись в таблицу user_profiles. Все происходит внутри одной транзакции.
Проверил, вроде все работает как надо. При ошибке добавления записи в user_profiles, отменяется запись в таблицу users.
Вопросы: всё ли я делаю правильно? Можно ли и дальше в проекте использовать такой подход? Нет ли каких подводных камней?
Прошу, наведите на путь истинный, ибо не ведаю что творю, добро или зло. Не хотелось бы, чтобы в конце проекта настигла кара небесная
Страницы 1