Atributos por defecto en un modelo

8/17

Lectura

Como lo vimos en la clase anterior, podemos jugar un poco con la forma de nuestro modelo para ejercer cierto control sobre la tabla a la cual estamos apuntando.

Una de las acciones que podemos realizar es darle valores por defecto a ciertos atributos de la tabla y, de esta manera, cuando se inserten o se modifiquen datos que impliquen el uso de los campos especificados, se guardarán con el valor por defecto que hayamos especificado previamente.

Para indicar el valor por defecto debemos definir un array de atributos a los cuales le asignaremos un valor de la siguiente manera:

protected $attributes = [
    'name' => 'hola',
];

Si aplicamos esto a nuestro modelo Project, cada vez que realicemos una inserción o una actualización que implique el campo name no se guardará aquel valor que enviemos por parámetro, sino hola (lo que especificamos en este array).

Para agregar más campos a los cuales asignarle un valor por defecto solo debes agregarlo debajo de name, recuerda que es un array y debes separar cada valor con una coma (,). Es importante que indiques el nombre exacto del campo en la tabla para que esta definición tenga efecto.

Este ejemplo lo puedes aplicar cuando necesites que todos los registros que ingresen a la tabla projects tengan el mismo valor en una columna como lo puedes ver en la siguiente imagen:

Tablas y base de datos en Laravel con Eloquent

Sé responsable con el uso de esta propiedad, recuerda que si necesitas general un valor por defecto en un campo de una tabla, lo mejor es que lo definas cuando creas la tabla directamente en la base de datos.

En la próxima clase vamos a traer datos de nuestra base de datos por primera vez usando un Modelo y un Controlador para implementarlo 😃.

Aportes 15

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Algo muy importante a recalcar es que, si tu defines el valor por defecto desde $attributes, cuando trates de hacer una inserción y le pases un valor a ese campo al que le pusiste un valor por defecto el parámetro que le pases NO se va a tomar en cuenta y se insertará el valor que tengas configurado en attributes (O al menos así lo explican en esta clase), en cambio, si lo insertar en la base de datos al crear la tabla si que le hará caso al parámetro que le pases.

Un ejemplo un poco mas claro, sería un campo donde acumulamos puntos como el Platzirank de Platzi, entonces siempre se debe iniciar en cero ‘0’ y a medida que la gente va ganando puntos, este valor se va incrementando en la base de datos.

Otra manera de manipular los atributos del modelo en Laravel es usando Mutators nos permite transformar los valores de los atributos desde el modelo de manera sencilla un ejemplo de ello es la concatenación de name y last_name de tu modelo User:


   /**
     * Get the user's full name.
     *
     * @return string
     */
    public function getFullNameAttribute()
    {
       return $this->name . " ". $this->last_name;
    }

Si aplica para ambas sentencias INSERT O UPDATE no tiene ningún sentido usar esto…

Entendido 😃

Coincido es que es mucho mejor poner un valor por default en las migraciones

Algo muy importante a recalcar es que, si tu defines el valor por defecto desde $attributes, cuando trates de hacer una inserción y le pases un valor a ese campo al que le pusiste un valor por defecto el parámetro que le pases NO se va a tomar en cuenta y se insertará el valor que tengas configurado en attributes (O al menos así lo explican en esta clase), en cambio, si lo insertar en la base de datos al crear la tabla si que le hará caso al parámetro que le pases.

Interesante, pero entonces preferiría definir los datos default en la bd por migración, así se puede modificar el valor que se ingrese desde un formulario. Y pues creo que queda configurado internamente en la estructura de la tabla de la bd, por si se ingresa de alguna manera info por otro lado suponiendo el caso que fuera necesario.

Me quedan dudas sobre la parte que dices “cuando se inserten o se modifiquen”. Lo que conozco hasta ahora es que los valores por defecto son aplicados sólo en el momento de la inserción. Si funciona al actualizar ¿Cuales serían la reglas? ¿Reemplazaría el valor existente del registro?

Interesting!

En le caso de esta propiedad se puede recuperar el valor real del campo antes de modificar??, es decir, en el ejemplo tenemos que remplazamos el valor del campo name sin importar el que se ingrese, pero evaluar el valor que ingresa es posible?? usando esta propiedad para hacer un if por ejemplo

Entendido!

Muy interesante 😉

un buen dato esto!!!

Una dato para implementar. Gracias.