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.
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.
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