Imaginensé que tienen una tabla de viajes y una tabla de pasajes. Los asientos dentro de la tabla de pasajes se pueden repetir pero no para el mismo viaje. Las reglas de laravel nos quedan chicas y acá hay una posible solución, crear una función que modifique las reglas dinámicamente pasando parámetros desde el controlador. (valido solo el asiento)
<?php public static $rules = [ 'create' => [ 'asiento_id' => 'required|unique:pasajes,asiento_id,null,asiento_id,viaje_id,:id' ], 'update' => [ 'asiento_id' => 'required|unique:pasajes,asiento_id,:idasiento,asiento_id,viaje_id,:idviaje' ] ]; public static function rules( $action, $merge=[], $id=false, $search=':id') { $rules = static::$rules[$action]; if ($id) { foreach ($rules as &$rule) { $rule = str_replace($search, $id, $rule); } } return array_merge( $rules, $merge ); } ?>
Entonces desde el controlador podemos validar
<?php $validator = Validator::make($data, Pasajes::rules('create', [], $data['viaje_id'])); ?>
Lo mismo si queremos pasar más de un parámetro ya que str_replace admite remplazar arrays.
<?php $validator = Validator::make($data, Pasajes::rules('update', [], array($data->pasajero_id, $data->viaje_id, $data->asiento_id), array(':idpasajero', ':idviaje', ':idasiento'))); ?>
saludos!!
No hay comentarios.:
Publicar un comentario