informatica:programacion:php:frameworks:laravel:bases_de_datos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:php:frameworks:laravel:bases_de_datos [2025/03/06 10:50] – [Seeders] tempwin | informatica:programacion:php:frameworks:laravel:bases_de_datos [2025/03/09 15:10] (actual) – [Seeders] tempwin | ||
|---|---|---|---|
| Línea 401: | Línea 401: | ||
| En la carpeta '' | En la carpeta '' | ||
| - | Imaginemos que cada vez que se cree una tabla de usuarios, se añada un registro de un usuario con ciertos | + | Imaginemos que cada vez que se cree una tabla de usuarios, se añada un registro de un usuario con ciertos |
| <code php> | <code php> | ||
| Línea 440: | Línea 440: | ||
| Esto poblará las tablas de las bases de datos con lo que hemos programado. | Esto poblará las tablas de las bases de datos con lo que hemos programado. | ||
| + | |||
| + | <WRAP center round info 80%> | ||
| + | Si queremos ejecutar solo un determinado //seeder//: | ||
| + | |||
| + | <code bash> | ||
| + | php artisan db:seed --class=NombreSeeder | ||
| + | </ | ||
| + | </ | ||
| Podemos combinar los dos comandos anteriores de la siguiente manera: | Podemos combinar los dos comandos anteriores de la siguiente manera: | ||
| Línea 453: | Línea 461: | ||
| </ | </ | ||
| - | Esto habrá creado el fichero '' | + | Esto habrá creado el fichero '' |
| Después tendremos que modificar el método '' | Después tendremos que modificar el método '' | ||
| Línea 466: | Línea 474: | ||
| { | { | ||
| $this-> | $this-> | ||
| - | PostSeeder:: | + | PostSeeder::class, |
| - | ]) | + | UserSeeder::class |
| + | ]); | ||
| } | } | ||
| } | } | ||
| </ | </ | ||
| - | ==== Factories ==== | ||
| - | Los //Factories// permite generar automáticamente instancias de nuestros modelos. | + | Para ejecutar los //seeders//: |
| - | <WRAP center round info 60%> | + | <code bash> |
| - | En Laravel 8 hubo un cambio en la estructura y funcionamiento de los Factories | + | php artisan migrate: |
| - | </WRAP> | + | </code> |
| - | + | ==== Factories ==== | |
| - | Por defecto, Laravel incluye el factory **User** en '' | + | |
| - | Los factories son clases con el nombre de un modelo y luego una definición donde indicamos cómo queremos rellenar los datos del modelo. | + | Los //factories// son clases con el nombre de un modelo y luego una definición donde indicamos cómo queremos rellenar los datos del modelo. Funcionan como una serie de fábricas donde indicamos qué queremos que se cree en cada campo. |
| - | Para generar estos datos, | + | Al crear un proyecto en Laravel, incluye el factory **User** |
| <code php> | <code php> | ||
| - | | + | // ... |
| - | public function definition() | + | public function definition(): array |
| { | { | ||
| return [ | return [ | ||
| - | ' | + | ' |
| - | ' | + | ' |
| ' | ' | ||
| - | ' | + | ' |
| ' | ' | ||
| ]; | ]; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Para generar estos datos, Laravel se apoya en la biblioteca [[https:// | ||
| + | |||
| + | Para llamar a un //factory// existente, primero hay que modificar el método '' | ||
| + | |||
| + | <code php> | ||
| + | class DatabaseSeeder extends Seeder | ||
| + | { | ||
| + | /** | ||
| + | * Seed the application' | ||
| + | */ | ||
| + | public function run(): void | ||
| + | { | ||
| + | // ... | ||
| + | User:: | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | En el código anterior indicamos que queremos crear 10 registros de usuarios utilizando el //factory// '' | ||
| + | |||
| + | Para ejecutar el // | ||
| + | |||
| + | <code bash> | ||
| + | php artisan migrate: | ||
| + | </ | ||
| + | |||
| + | También podíamos haber colocado el código de //factory// en '' | ||
| + | |||
| + | <code php> | ||
| + | // ... | ||
| + | public function run(): void | ||
| + | { | ||
| + | $user = new User(); | ||
| + | | ||
| + | $user-> | ||
| + | $user-> | ||
| + | $user-> | ||
| + | | ||
| + | $user-> | ||
| + | | ||
| + | User:: | ||
| } | } | ||
| </ | </ | ||
| Línea 502: | Línea 553: | ||
| <code php> | <code php> | ||
| - | php artisan make: | + | php artisan make: |
| </ | </ | ||
| - | Hemos indicado que el factory que queremos crear es para el modelo **Product**. Tendremos que rellenar la definición de la factory recién creada: | + | Hemos indicado que el factory que queremos crear es para el modelo **Post** siguiendo la convención del nombre. Tendremos que rellenar la definición de la //factory// recién creada: |
| <code php> | <code php> | ||
| Línea 511: | Línea 562: | ||
| { | { | ||
| return [ | return [ | ||
| - | ' | + | ' |
| - | 'description' => $this-> | + | 'content' => $this-> |
| - | 'price' => $this-> | + | 'category' => $this-> |
| - | 'stock' => $this-> | + | 'published_at' => $this-> |
| - | ' | + | |
| ]; | ]; | ||
| } | } | ||
| </ | </ | ||
| - | Para que un modelo | + | Es importante indicar en nuestro |
| <code php> | <code php> | ||
| - | namespace App\Models; | ||
| - | |||
| use Illuminate\Database\Eloquent\Factories\HasFactory; | use Illuminate\Database\Eloquent\Factories\HasFactory; | ||
| - | use Illuminate\Database\Eloquent\Mdeol; | ||
| - | class Cart extends Model | + | class Post extends Model |
| { | { | ||
| - | + | use HasFactory; | |
| - | use HasFactory; | + | |
| - | + | ||
| - | // code | + | |
| } | } | ||
| </ | </ | ||
| - | + | Ahora vamos a '' | |
| - | Ahora usaremos este factory para crear de forma aleatoria instancias de nuestro producto. Usamos Artisan: | + | |
| <code php> | <code php> | ||
| - | php artisan tinker | + | // ... |
| + | public function run(): void | ||
| + | { | ||
| + | Post:: | ||
| + | } | ||
| </ | </ | ||
| - | Y dentro de tinker: | + | Ya podremos usarlo y se generarán 100 registros en la tabla '' |
| - | < | + | < |
| - | App\Models\Product::factory()-> | + | php artisan migrate:fresh --seed |
| </ | </ | ||
| - | Veremos las 5 instancias que se habrán creado. Como hemos usado '' | + | De todos modos, si nuestro |
| - | < | + | < |
| - | App\Models\Product:: | + | // ... |
| + | public function run(): void | ||
| + | { | ||
| + | Post::factory(100)->create(); | ||
| + | |||
| + | $this->call([ | ||
| + | UserSeeder:: | ||
| + | ]); | ||
| + | } | ||
| </ | </ | ||
| - | |||
| ==== Database seeder ==== | ==== Database seeder ==== | ||
informatica/programacion/php/frameworks/laravel/bases_de_datos.1741254601.txt.gz · Última modificación: por tempwin
