Cómo pasar el valor dentro del modelo para verificar las reglas

Estoy tratando de tener estas reglas en mi modelo

'Email' => 'email|unique:tablename,coloumntoignore,ignoreid', 

Las reglas anteriores son para verificar el coloumn único, excepto el id que se proporcionará en el ignoreid

Enfrenta dos problemas aquí

Recibo la opinión del usuario

 $DriverData = Input::except(array('_token')); 

y enviándolo al modelo

 $validation = Validator::make($DriverData, DriverModel::$updaterules); 

Nota: Esta actualización no es la propia, así que no puedo obtenerla con Auth::user()->id y mi clave principal no es id

Lo reviso por

 'Email' => 'email|unique:driver_details,email,4', 

Me dijo error

 Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select count(*) as aggregate from `driver_details` where `email` = [email protected] and `id`  4) 

aunque mencioné el protected $primaryKey = 'DriverId';

Entonces, ¿cómo puedo obtener el valor del campo dentro del modelo para que yo verifique que la regla verifique el coloumn único excepto su

Nota: La manera sucia como poner el DriverId en la sesión en el controlador y llegar aquí así no es preferible.

Si está usando rutas / controladores ingeniosos, la identificación del registro que está tratando de actualizar debe ser el parámetro pasado al método de actualización en el controlador.

Si no está usando rutas / controladores ingeniosos, la id del registro que está actualizando debe pasarse junto con los demás datos del formulario.

En cuanto a la regla de validación, dado que su campo de id no es id , debe indicarle a la regla que. El cuarto parámetro de la regla única es el nombre del campo de id. La documentación sobre la regla única está aquí .

 'Email' => 'email|unique:driver_details,email,4,DriverId', 

Una vez que descubra cómo obtiene la identificación del registro que está actualizando, deberá averiguar cómo insertar esa identificación en su regla de correo electrónico. Dado que parece que sus reglas se definen como un atributo estático en DriverModel , le DriverModel que consulte esta pregunta / respuesta aquí . Básicamente, necesitará un marcador de posición en su regla y luego un método estático en el modelo que puede reemplazar el marcador de posición con su ID especificada:

 class DriverModel extends Eloquent { public static $updaterules = array( 'Email' => 'email|unique:driver_details,email,%1$s,DriverId' ); public static function getUpdateRules($id = 'NULL') { $rules = self::$updaterules; $rules['Email'] = sprintf($rules['Email'], $id); return $rules; } } // usage $validation = Validator::make($DriverData, DriverModel::getUpdateRules($id));