Convenciones para los modelos

7/17

Lectura

En el modelo que creamos para la tabla projects definimos dos variables protegidas donde indicamos el nombre de la tabla y la llave primaria, estas variables están indicándole a nuestro modelo a dónde debe apuntar para que nos ofrezca un mapeo de esa tabla y podamos operar sobre ella.

Existen diferentes atributos que podemos seleccionar para darle más detalles según necesitemos, sin embargo, la tabla y la llave primaria son los que debe llevar el modelo siempre.

Atributos tablas Eloquent ORM

Ten en cuenta que la sintaxis debe ser respetada, esto quiere decir que deben ser variables del tipo y nombres indicados para que puedan surtir efecto.

Nombre de la tabla 🏷

Para referenciar el nombre de la tabla, debes usar esta estructura: protected $table = 'nombre_de_la_tabla';.

Llave primaria 🔑

Para indicar el nombre de la llave primaria debes indicar con la variable: protected $primaryKey = 'nombre_del_campo';.

Auto incremento ➕

Si quieres controlar el auto incremento de la llave primaria puedes controlarlo desde aquí utilizando: public $incrementing = false;.

Tipo de la llave primaria 🗝

En caso de que la llave primaria no sea un entero y estés controlando el auto incremento, debes especificar el tipo de dato: protected $keyType = 'string';.

Marcas de tiempo o Timestamps ⏱

Un detalle interesante es que Eloquent asume que tu tabla tiene los campos created_at y updated_at, así que cada vez que se inserte un valor o se modifique, buscará estos campos para asignarle los valores correspondientes, si no los tienes y no se lo indicas en el modelo, te puede generar un error o simplemente no guardar tus registros, es por eso que debes desactivarlos si no vas a contar con ellos de manera física en la base de datos.

public $timestamps = false;

En cambio, si tienes estos valores con otro nombre puedes personalizarlos y referenciarlos al inicio de la clase y de esta forma ya te los tomaría:

const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';

Conexión de la base de datos 🔌

Es posible que tengas varias conexiones a bases de datos, pero Eloquent tomará la que tienes definida por defecto, si por alguna razón deseas que este modelo se conecte a otra base de datos (y ya tienes configurada esa conexión), puedes indicarle a cuál apuntar:
protected $connection = 'connection-name';.

Ya conoces todo lo que puedes hacer sobre un modelo para personalizar y manipular una tabla de la base de datos. Ten cuidado con usar los atributos en los momentos necesarios, si hay cambios importantes o que deban ser permanentes en la base de datos, lo mejor será que los hagas allí directamente, recuerda que en la clase anterior vimos que las migraciones podrían ayudarte a realizar estos cambios de forma controlada.

Reto 🏁

Elimina los campos de marcas de tiempo en las tablas de ciudades, compañías y usuarios, luego configura tu modelo para que no las tome al insertar valores.


¡Qué emoción 🎉! Has aprendido a configurar los atributos principales que pueden tener tus tablas desde los modelos y ahora podrás personalizar tus transacciones. En la próxima clase aprenderás a seleccionar atributos por defecto que podrás inicializar desde tus modelos con el valor que desees.

Aportes 18

Preguntas 2

Ordenar por:

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

Realmente ninguno de estos atributos es obligatorio, por algo Laravel te crea estos modelos sin los atributos, estos atributos son obligatorios cuando NO respetas las convenciones, ya que Laravel es lo suficientemente inteligente como para encontrar la tabla para tu modelo usando el nombre de la clase del modelo, pero si deseas personalizar tu modelo y mucho más entonces estos atributos son útiles.

Otra cosa, no es buena idea eliminar las marcas de tiempo ya que te ayudan a mantener un registro de qué sucedió cuándo y sirve para hacer debug y demás:D!

La verdad que para ser un curso escrito no esta nada mal, aunque personalmente prefiero los cursos en video.

![Reto superado lo hice con consultas sql ](

con migraciones se realiza algo asi claro debes de tener la migración de creacion
php artisan make:migration delete_updated_at_and_created_at_to_users_table --table=users

y en el método up agregamos

$table->dropTimestamps();

y para invertir la migración usamos en el método down

 $table->timestamps();

En realidad no siempre es necesaria agregar los atributos primary key ni table a un modelo de laravel ya que si nuestra tabla sigue ciertas conveciones laravel por defecto asigna estos valores. Ejemplo
Si tenemos una tabla projects en nuestra base de datos con una llave primaria autoincremental id.
En laravel nuestro modelo se llama Project el framework ya reconoce que nuestra tabla se llamará projects y que tiene una llave primaria id.

Mi aporte!

Challenge Done!

  1. Deactivate timestamps on models

2.Create a migration to delete timestamps from tables

3.Write the schemas to delete created_at and updated_at columns
Nota: Blueprint es una herramienta de código abierto para generar rápidamente múltiples componentes de Laravel a partir de una única definición legible por humanos

  1. Run migration using php artisan migrate
  1. Results of challenge

Siempre es bueno dar una mirada a la Documentación Oficial

Me gusto mucho esta clase, es precisa en lo que debemos tener en cuenta a la hora de crear un Modelo.

Listo 😃

Gracias por el tutorial.

Yo utilizo los atributos normalmente, cuando me toca utilizar bases de datos complejas de proyectos en CodeIgniter o CakePHP, y con Eloquent añadiendo un par de atributos los puedo utilizar cómodamente en Laravel.

Pero esa configuración que se hace en el modelo, como decirle que la llave primaria es auto increment y el resto de atributos, eso se define desde la migración, no desde el modelo.

Si al igual que yo crearon migraciones para crear las tablas y quieren evitar crear una migración más para hacer este movimiento, pueden comentar de su migración original los ‘timestamps’:

$table->timestamps();

y correr en terminal:

php artisan migrate:refresh

Esto revertirá la creación de las tablas de forma inicial y las volverá a generar con los cambios realizados en las migraciones.

ATENCIÓN: Si ya se tienen datos en las tablas no se recomienda este procedimiento ya que se eliminarán. Es útil cuando configuramos inicialmente las tablas que utilizaremos en nuestro proyecto como en este caso y queremos hacer un cambio antes de llenar de datos las tablas…

¡Y seguimos aprendiendo!

Listo!

muy buena clase 😄 muchas gracias. Una pregunta podemos utilizar dos bases de datos cuando estamos trabajando con un solo proyecto de laravel?

Si no mal recuerdo debería ser

public $timestamps = false;