Eloquent: Obtener resultado de un Modelo ignorando el Accessor

Hace algún tiempo cuando hablamos acerca de  ¿Qué son exactamente los Accessor y Mutators? vimos que los Accessor se pueden utilizar para dar formato a los valores que se recuperan de la base de datos, estos son de mucha utilidad para muchos casos de uso donde queremos formatear un valor antes de enviarlo.

Pero puede suceder el caso, de que necesitemos obtener exactamente el valor original de la Base de Datos, para hacer algún tipo de validación, o trabajar con el para cualquier cosa, ¿como podemos hacerlo si ya declaramos un accessor?

Inventemos un ejemplo

Inventemos un caso de uso para esto,  para entrar en contexto, dentro de mi tabla user, voy a crear un campo del tipo enum llamado state, el cual tiene tres posibles valores que son “active, approved, inactive“.

Luego, dentro de mi modelo User tengo declarado el siguiente accesor:

Lo cual busca en mi archivo de traducción user.php (lo cual lo tengo en mi carpeta en en ingles, y en mi carpeta es en español) el valor que haya obtenido en mi base de datos (para mas información véase la documentación):

Entonces cada vez que obtenga un resultado de mi modelo User, el campo state me va a venir con el valor que tenga definido en mi archivo de traducción.

Obteniendo el valor original y no el accesor

Ahora bien, que pasa si deseo hacer algún tipo de validación del tipo if($user->state == ¿?). Ya que mi aplicación es multidioma no me serviría decir if($user->state == 'Activo')  ya que no siempre esto es cierto, seria mejor hacerlo con el campo original de la base de datos, para hacerlo Eloquent ya pensó por nosotros y nos pone a nuestra disposición un método para obtener el resultado original el cual es llamado getOriginal(). Podemos utilizarlo de la siguiente manera:

En consecuencia, si quisiéramos hacer la validación podríamos usar:

Nota: strcasecmp es una función de php que hace una comparación de string segura a nivel binario e insensible a mayúsculas y minúsculas.

Y con esto quedaría resuelto nuestro problema. Como vemos Eloquent posee una cantidad de métodos que no se encuentran directamente en la documentación de Laravel, así que nunca esta de mas pasarse por la API del Framework.

Cualquier duda, pregunta y sugerencia puedes dejarla en nuestros comentarios, y recuerda que puedes unirte al Slack de Laraveles a través del siguiente enlace y poder pedirlo.

Comparte este artículo

Entra en la discusión y deja tu comentario