carlos orozco
Luciano Nicolas Pereira
Mauricio Galvez
¿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
laravel new seguido del nombre del proyecto en la terminal de la carpeta de sitios.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.
php artisan make:model NombreDelModelo.-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:
.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.
public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('titulo'); $table->timestamps(); }); }
¿Cómo insertar datos y practicar con Eloquent?
Eloquent nos proporciona múltiples maneras de insertar y practicar con los datos.
Inserción de datos usando Factory y Tinker
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!
carlos orozco
Luciano Nicolas Pereira
Mauricio Galvez
María Sierra
Carlos Eduardo Gomez García
Jhon Fabio Cardona Martinez
Carlos Eduardo Gomez García
José Rodolfo Uriarte Ramírez
Sergio Abel Gordon Dolimpio
Geyner Mauricio Rivera Jimenez
Juan Carlos García Esquivel
carlos orozco
María Sierra
Javier Amaya Patricio
Tomas Goldenberg
Miguel Angel Muñoz Pozos
Italo Morales Fantone
ProfesorEdgar Marcelino Zamora Cruz
Carlos Eduardo Gomez García
Andrés Felipe Lopez gomez
Patricia Antelo López
Álvaro Moscoso Muñoz
Ivy Pamela Castillo Torres
Jhon Fabio Cardona Martinez
Alexander Sanchez
Richard Delfin Berna Capo
Italo Morales Fantone
ProfesorPlatzi Team
LEONARD CUENCA
victor saumelli
David Antonio Garcia Saaib
Italo Morales Fantone
ProfesorPaul Cortes
Factory()->create ya no funciona!
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; class PostFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ protected $model = Post::class; /** * Define the model's default state. * * @return array */ public function definition() { 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; class Post extends Model { 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í:
class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { 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.
public function definition() { return [ 'title' => $this->faker->sentence ]; }
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:
use App\Models\Post; Route::get('eloquent', function () { $posts = Post::all(); foreach ($posts as $post) { echo "<p>ID: $post->id, TITLE: $post->title</p> <br>"; } });
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 ($posts as $post) { echo "<p>ID: $post->id, TITLE: $post->title</p> <br>"; } }); // Si queremos ordenar de forma descendente y solo ver 3 items Route::get('eloquent', function () { $posts = Post::where('id', '>=', '20') ->orderBy('id', 'desc') ->take(3) ->get(); foreach ($posts as $post) { echo "<p>ID: $post->id, TITLE: $post->title</p> <br>"; } });
Es importante entender que:
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?
Php artisan make:model -h
¿Cómo correr una migración en Laravel?
Php artisan migrate
Configuración de la base de datos
Ir al archivo .env
Configurar las credenciales de nuestra db
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=eloquent DB_USERNAME=root DB_PASSWORD=
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 1 y configuramos la columna title -agregamos el nombre de nuestra DB en el archivo .env 3 TERMINAL php artisan migrate enviamos nuestras tablas a DB 4 -volvemos a tinker y crearemos 30 posts factory(App\Post::class, 30)->create() 5 configuramos rutas y metods -Route::get(’/eloquent’, function () { TODOS LOS CAMPOS $posts = Post::all(); -Route::get(’/eloquent’, function () { TODOS LOS CAMPOS MAYORES A 20 $posts = Post::where(“id”, “>=”, “20”)->get(); -Route::get(’/eloquent’, function () { TODOS LOS CAMPOS MAYORES A 20 DE MAY A MEN $posts = Post::where(“id”, “>=”, “20”) ->orderBy(“id”,“desc”) ->get(); Route::get(’/eloquent’, function () { campos 30 29 28 $posts = Post::where(“id”, “>=”, “20”) ->orderBy(“id”,“desc”) ->get();
Aquí hay mas documentación https://laravel.com/docs/7.x/eloquent
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); } ...
Referencia: https://aprendible.com/blog/como-solucionar-el-error-specified-key-was-too-long-error-en-laravel
Excelente, gracias
El método take es similar al limit el cual trae un número determinado de registros que le asignamos.
Cuando se esta realizado el print de los datos, se tiene que llamar a
use App\Models\Post;
Esta es una actualización de Laravel.
Utilizando las migraciones, como hago para actualizar una tabla ya existente? se puede hacer eso?
Hay que crear una migración netamente para la actualización, se usan unos métodos diferentes como table, change, etc. https://laravel.com/docs/7.x/migrations#columns
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