En este videotutorial exploraremos cómo utilizar Eloquent, el ORM de Laravel, para crear registros en la base de datos de manera sencilla y eficiente. Aprenderemos a añadir propiedades a los modelos, veremos cómo Eloquent maneja los campos ‘id’, ‘createdAt’ y ‘updatedAt’ de forma automática y también cubriremos diferentes métodos de creación de registros con Eloquent, el uso de métodos mágicos, y cómo manejar errores comunes.

Esta lección incluye un video premium

Regístrate para ver este video y cientos de lecciones exclusivas.

Mira el código en GitHub: actual, resultado, comparación.

Crear registros utilizando Eloquent ORM

Regresemos a database/seeders/NoteSeeder.php. Podemos crear nuestras notas utilizando Eloquent de varias maneras, por ejemplo:

Creamos una instancia del modelo Note, asignamos sus propiedades una a una y finalizamos llamando al método save:

<?php

use App\Models\Note;

$note = new Note;
$note->title = 'Titulo de la nota';
$note->content = 'Contenido de la nota';
$note->save();

También es posible pasar las propiedades como un arreglo asociativo cuando construimos el modelo:

<?php 

use App\Models\Note;

$note = new Note([
    'title' => 'Titulo de la nota',
    'content' => 'Contenido de la nota',
]);
$note->save();

Ten en cuenta que solo se guardará la nota en la base de datos cuando llames al método save.

Si llamas al método save luego de crear una instancia de un nuevo modelo, Eloquent intentará insertar un nuevo registro en la tabla correspondiente de la base de datos; pero si llamas a este método una segunda vez o desde un modelo ya existente, Eloquent intentará realizar una actualización al registro correspondiente.

La forma más sencilla para crear registros con Eloquent desde nuestro Seeder es utilizando el método create. Reemplaza lo siguiente:

<?php

DB::table('notes')->insert([
  /* campos aqui */
]);

Por:

<?php

Note::create([
  /* campos aqui */
]);

No olvides importar el modelo al principio del archivo con use App\Models\Note;.

Al ejecutar php artisan migrate:fresh --seed y revisar la base de datos, podremos comprobar que hemos obtenido el mismo resultado que antes.

Laravel provee un mecanismo de protección ante asignación masiva, es decir, asignación de múltiples atributos por medio de un arreglo; sin embargo, esta protección está desactivada dentro de los Seeders y vamos a tratar este tema con calma en la lección siguiente, cuando trabajemos en el formulario para crear notas.

Manejo automático de los campos createdAt y updatedAt

Eloquent facilita el manejo de las marcas de tiempo en las bases de datos. Automáticamente, al crear un nuevo registro, Eloquent asigna la fecha y hora actuales al campo ‘createdAt’. De forma similar, cada vez que un registro es actualizado, el campo ‘updatedAt’ se actualiza automáticamente con la fecha y hora del momento de la actualización. Esto elimina la necesidad de gestionar manualmente estas marcas de tiempo.

Para desactivar el manejo automático de los campos ‘createdAt’ y ‘updatedAt’ en un modelo Eloquent de Laravel, puedes hacerlo definiendo la propiedad public $timestamps = false; en la definición de tu clase modelo. Al hacer esto, Eloquent no gestionará automáticamente estos campos cuando crees o actualices registros en la base de datos:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Note extends Model
{
    public $timestamps = false;
}

Eloquent y el uso de propiedades mágicas

Podrás notar que nuestro modelo de notas no tiene las propiedades $title, $content etc, sin embargo podemos usarlas como si existieran, por ejemplo:

<?php

$note = new App\Models\Note;
$note->title = 'Titulo de la nota';

echo $note->title; // Imprime Titulo de la nota

Eloquent utiliza Métodos Mágicos para lograr esto, y almacena estos campos en la propiedad protegida $attributes dentro del modelo. Puedes ver esto por ti mismo si llamas al método getAttributes() del modelo:

<?php

$note = new App\Models\Note;

$note->title = 'Titulo de la nota';

$note->getAttributes(); // ['title' => 'Titulo de la nota']

Para entender a fondo cómo funciona ésta y otras características de Eloquent y Laravel, te recomiendo que veas nuestro Curso de programación orientada a objetos con PHP.

Utilizando Tinker, la consola interactiva de Laravel

Vamos a conectarnos a Tinker ejecutando el siguiente comando desde el directorio principal del proyecto:

php artisan tinker

Ahora estamos dentro de la consola interactiva, podemos salir con exit y volver a entrar con php artisan tinker, de hecho, esto es necesario si hacemos cambios en el código y queremos probarlos.

Desde aquí puedes interactuar con Eloquent como ya hemos aprendido.

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Introducción al ORM Eloquent en Laravel 10 Lección siguiente Crea un formulario para agregar datos con Laravel 10 o superior