¿Cómo empezar con Laravel Eloquent para gestionar bases de datos?
Laravel Eloquent es una herramienta formidable dentro del framework Laravel que facilita la manipulación y consulta de bases de datos. Su propósito principal es permitirnos operar fácilmente sobre datos almacenados, ya sea para inserciones, actualizaciones o consultas. En esta sección veremos cómo iniciarnos con Eloquent y realizar las configuraciones básicas.
Configurando un nuevo proyecto en Laravel
Creación del proyecto: Para trabajar con Eloquent, primero necesitamos crear un nuevo proyecto en Laravel. Esto se realiza ejecutando el comando laravel new seguido del nombre del proyecto en la terminal de la carpeta de sitios.
Uso del editor de código: Una vez creado, se abre el nuevo proyecto en nuestro editor de código para empezar a configurar todas las prácticas necesarias.
Generando modelos y configuraciones de base de datos
¿Qué es un modelo en Laravel?
Un modelo en Laravel es la representación de una tabla en nuestra base de datos. Gracias a la migración y la configuración por defecto, Laravel permite crear fácilmente estos modelos.
Comando para crear modelos: Usamos php artisan make:model NombreDelModelo.
Parámetros adicionales: Con parámetros como -m (migración), -f (factory) y -s (seeder), podemos generar las estructuras básicas necesarias para manipular los datos.
Conexión con la base de datos
Para realizar cualquier operación, es vital conectar Laravel con nuestra base de datos:
Archivo .env: Modificamos el archivo .env para configurar el acceso a la base de datos, especificando nombre, usuario y contraseña.
Diseñando tablas y aplicando migraciones
La estructura de las tablas se define con migraciones. Una vez modificada, con php artisan migrate podemos crear las tablas en la base de datos.
Eloquent nos proporciona múltiples maneras de insertar y practicar con los datos.
Inserción de datos usando Factory y Tinker
Factory: Nos facilita la creación de datos aleatorios para pruebas.
Tinker: Ejecutando php artisan tinker podemos usar Factory para poblar nuestra base de datos:
factory(App\Post::class,30)->create();
Esto generará rápidamente 30 registros en la tabla posts para prácticas.
¿Cómo consultar y presentar datos?
Eloquent nos brinda métodos sencillos para acceder y manipular nuestros registros.
Consultas básicas con Eloquent
Para obtener datos de una tabla, basta con usar el método all():
$posts=App\Post::all();
Podemos mostrar estos registros fácilmente en una vista Blade.
Búsquedas y filtrados avanzados
Eloquent permite búsquedas más específicas mediante métodos como where:
$posts=App\Post::where('id','>=',20)->get();
También podemos ordenar resultados con orderBy:
$posts=App\Post::orderBy('id','desc')->get();
Prácticas adicionales usando métodos avanzados
Limitando resultados y seleccionando registros específicos
Es común querer limitar la cantidad de registros obtenidos de una consulta; para ello, usamos el método take:
$posts=App\Post::take(3)->get();
Buenas prácticas con Eloquent
Es crucial recordar que cada archivo de modelo representa una tabla y entender la importancia de manipular datos de forma correcta para cualquier aplicación. Eloquent nos ofrece una interfaz intuitiva que agiliza estas tareas, permitiéndonos gestionar grandes volúmenes de datos de manera eficiente. Con práctica y uso continuo, puede convertirse en una herramienta poderosa para cualquier desarrollador en el ecosistema Laravel. Así que, ¡sigue aprendiendo y practicando para mejorar tus habilidades con Eloquent en Laravel!
Desde laravel 8.0 fue actualizado Factory para que funcione como clase, ahora para llamar el factory desde Tinker es necesario llamarlo del siguiente modo:
Post::factory()->count(10)->create()
Ahora cuando se genera un Modelo con make:model creara la siguiente estructura por default:
El archivo Factory
<?php
namespace Database\Factories;use App\Models\Post;use Illuminate\Database\Eloquent\Factories\Factory;use Illuminate\Support\Str;classPostFactoryextendsFactory{/**
* The name of the factory's corresponding model.
*
* @var string
*/protected $model =Post::class;/**
* Define the model's default state.
*
* @return array
*/publicfunctiondefinition(){return[// AQUI SE AGREGARA LA CLAVE MAS VALOR DE LA SIGUIENTE FORMA:'title'=> $this->faker->sentence
];}}
El archivo modelo:
<?php
namespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;classPostextendsModel{ use HasFactory;}
Gracias genio!
grande crack!
Eloquent: trabajando con este ORM
Con Eloquent trabajamos el manejo de datos, este está incluido en Laravel y nos ayuda a trabajar con todo lo que tenga que ver con DB.
Esta herramienta nos permitirá hacer consultas, eliminar, actualizar, y listar. Podremos hacer todo lo que se puede hacer con una DB sin escribir una sola línea d SQL.
El comando de php artisan para crear nuevos modelos es:
php artisan make:model *nombre*
// Ej. Solo crea la migración y el factory. Si queremos que cree todo solo escribimos el parámetro -a
php artisan make:model Post -m -f
📋 Un modelo es la representación de una tabla que tenemos en la DB.
Para crear una atributo/dato dentro de la tabla que acabamos de crear, vamos a database → migrations → archivo_con_nombre_de_la_tabla.php y dentro de la clase CreateNombreTable en el método Up() dentro del Shema::create escribiremos el atributo mas el tipo de dato, así:
classCreatePostsTableextendsMigration{/**
* Run the migrations.
*
* @returnvoid */publicfunctionup(){Schema::create('posts',function(Blueprint$table){$table->id();# Así creamos los atributos, indicando su tipo de dato y el nombre de este.$table->string('title');$table->timestamps();});}
Para modificar el Factory en Laravel 8x tenemos que escribir en el método definition() dentro de las llaves del return.
En Laravel 8x el componente Faker ya no se como clase, ahora el componente está implícito en la clase del factory, y por eso tenemos que usar $this para usar faker.
Y para correr el comando dentro de php artisan tinker para crear datos en la DB utilizamos el siguiente comando:
App\Models\Post::factory(30)->create()
El 30 es el número de elementos que queremos que cree.
De la siguiente forma configuramos la ruta para que nos imprima los datos:
Si queremos hacer una consulta más compleja, lo hacemos de la siguiente forma:
Route::get('eloquent',function(){$posts=Post::where('id','>=','20')->get();foreach($postsas$post){echo"<p>ID: $post->id, TITLE: $post->title</p> <br>";}});// Si queremos ordenar de forma descendente y solo ver 3 itemsRoute::get('eloquent',function(){$posts=Post::where('id','>=','20')->orderBy('id','desc')->take(3)->get();foreach($postsas$post){echo"<p>ID: $post->id, TITLE: $post->title</p> <br>";}});
Es importante entender que:
Un archivo = Una tabla en la base de datos
La correcta manipulación de los datos.
UPDATE Laravel 8
En Laravel 8 el tema de los factories también cambiaron, el comando para crear el factory aún funciona, sin embargo, al entrar a PostFactory.php notarás que la estructura es muy diferente.
No te preocupes, para escribir tu factory ahora tienes que buscar la función que se llama "definition()" verás que esta está retornando un array vacío, es ahí en donde tienes que escribir tu factory con los datos que tienes que retornar.
Para acceder al componente "faker" ya no se usa la clase Faker, ahora este componente está implícito en la clase del factory, por lo que simplemente tienes que usar $this para usar faker:
"title"=> $this->faker->sentence
Y por último, para correr tu factory, ya no se usa el helper facotry() (Fue descontinuado), ahora debes usar el modelo directamente, por eso, Laravel 8, al crear tu modelo, usa un trait llamado "HasFactory"
Entonces, en tinker debes correr el siguiente comando:
App\Models\Post::factory(30)->create()
El número 30 es la cantidad de registros que deseas crear
Gracias por tu aporte, estoy haciendo el curso con la versión 8 de Laravel y si ha tenido varios cambios a comparación de la 7
¡Ánimos! Yo fui dejando aportes a lo largo de este curso con cómo se harían en Laravel 8.
Además también en enero se estrena el curso de Laravel 8 así que podrías estar atento a ese:D
Para aclaración a nuevos usuarios en el minuto 3:50, no es crear una nueva tabla como se comenta, sino un nuevo campo de tipo string llamado title.
es verdad, es un campo de la tabla posts
Muchas gracias
Compañeros les comparto en enlace del paquete Faker para que vean todos los tipos de datos que pueden generar, también pueden cambiar el idioma de los datos que se generan por si les gusta personalizar esto.
Tambien importante tomar en cuenta que ya en la version 8.0 hay una carpeta para los modelos en App\Models
Hola!! Si quieren formar parte de un grupo de estudios de Devs, les dejo un link a un grupo de Telegram que está muy chulo.
También tienen una organización de GitHub, únete por aquí:
Eloquent: trabajando con este ORM
Modelo: Representación de una tabla que tenemos en nuestra base de datos.
Laravel traer por defecto la representación de la tabla usuarios.
¿Cómo crear un modelo?
Php artisan make: model nombreModelo
¿Cómo mostrar los comandos adicionales que podemos agregar a la creación de un modelo?
Entramos a la consola de tinker para poder revisar si quedo configurada correctamente la db usando el comando php artisan thinker
Revisamos la conexión entre Laravel y nuestra db en mysql usando el comando
DB::connection()->getPdo();
En caso de estar bien la conexión nos devolverá información referente a la misma y de lo contrario un error, que con una poco de búsqueda podremos solucionar.
Nota: Por convención los nombres de los modelos deben ser escritos en singular y en inglés, para poder formar así sus migraciones, factory etc..
Seteo de la migración de post
¿Cómo puedo agregar una nueva columna a una migración?
$table->string('nombrecolumna',longitud);
Ejemplo titulo de post
$table->string('title');
Si no especificamos la longitud de la columna a utilizar se pondrá por defecto de 255.
¿Cómo configurar un factory en Laravel para poder crear datos de prueba?
Entro a tinker -> php artisan thinker
Utilizo factory(App\Post::class,30)->create() para poder crear datos de prueba
1 creamos el model .la migracion y la factory
php artisan make:model Post-m -f
2 conexion a abase de datos
-creamos una base de datos en mysql o tu DB-vamos a la carpeta database/migrations al arcivo cre creamos con el commando en el punto 1y configuramos la columna title
-agregamos el nombre de nuestra DB en el archivo .env3TERMINAL php artisan migrate enviamos nuestras tablas a DB4-volvemos a tinker y crearemos 30 posts
factory(App\Post::class,30)->create()5 configuramos rutas y metods
-Route::get(’/eloquent’,function(){TODOSLOSCAMPOS$posts =Post::all();-Route::get(’/eloquent’,function(){TODOSLOSCAMPOSMAYORESA20$posts =Post::where(“id”, “>=”, “20”)->get();-Route::get(’/eloquent’,function(){TODOSLOSCAMPOSMAYORESA20DEMAYAMEN$posts =Post::where(“id”, “>=”, “20”)->orderBy(“id”,“desc”)->get();Route::get(’/eloquent’,function(){ campos 302928$posts =Post::where(“id”, “>=”, “20”)->orderBy(“id”,“desc”)->get();
Y el enlace compartido en la sección de archivos, todo ese material te llevarán a un nivel superior respecto a las consultas :)
¿El método take() es el equivalente LIMIT en SQL?
Sí, de hecho justamente es un LIMIT, pero solamente "toma" x cantidad de registros :D
Excelentee xplicacion, me dio muchos problemas por que estoy en laravel 8 pero nada que la comunidad no me pudiera ayudar.
Creo que por fin lo he entendido. Cualquier cosa corregirme, que estaré encantada de aprender.
Para tenerlo claro, por un lado:
1º. Hay que crear una base de datos en phpMyAdmin
2º. Asociarla la DB, a nuestro proyecto en el archivo de env. DB_DATABASE=
Y por otro:
1º. Crear un modelo con nombre de la tabla, en la terminal. (Así se crea la tabla)
2º. En la carpeta de migraciones, tenemos el modelo. Aquí podemos modificar los atributos de la tabla.
3º. Ejecutando el comando de migrate, se realizan los cambios en la tabla que hay en la DB.
Si aparece el error "Specified key was too long error" al ejecutar el comando php artisan migrate, se debe añadir en el fichero "app\Providers\AppServiceProvider.php":
...
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
...
public function boot()
{
Schema::defaultStringLength(191);
}
...
Bueno pues a mi no me permitio visualizar la informacion igual que al profesor, por lo que puedo entender es algo en la ruta,estoy manejando XAMPP y veo a muchos compañeros con el mismo problema :( En la anterior seccion no hubo pobrema ya que ingresaba al Service.php y podia realizar lo mismo que el profesor pero en este caso por mas que intente no fue posible 😐
Platzi le hace falta algo que si alguien te quiere ayudar o responder te notifique por correo.
Por alguna razón que desconozco la tabla de post no se migro a la base de datos y tuve que crearla manual, esta no arrojaba ningun error ni nada y me decia que ya estaba creada pero no aparecia en la base de datos. de resto todo perfecto
a mi me paso que tenia mysql en laragon y tambien en mi equipo asi que tuve que apagar uno de los dos para que funcionara el otro
Y ya lo resolviste?... De ninguna manera debe fallar la migración, veamos qué sucede.
Gracias al factory, podemos configurar datos falsos para realizar pruebas, para esto primero debemos de configurar el archivo de factory correspondiente al modelo