Mostrando entradas con la etiqueta Factory. Mostrar todas las entradas
Mostrando entradas con la etiqueta Factory. Mostrar todas las entradas

Factory image: error Cannot write to directory

Para solucionarlo en .env cambiar:
FILESYSTEM_DISK=local
por
FILESYSTEM_DISK=public

Nota: Dependiendo de la versión de Laravel tb se puede llamar FILESYSTEM_DRIVER

Arreglar el problema de faker->image que crea las imágenes pero luego desaparecen

Abrir el archivo: vendor\fakerphp\faker\src\Faker\Provider\Image.php

y a partir de la linea 106 agregar estás dos lineas de código: curl_setopt($ch, CURLOPT_FILE, $fp); //línea existente
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//nueva línea
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//nueva línea
$success = curl_exec($ch) && curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200;//línea existente

Ejemplo básico de Factory y Seeders

Crear el módelo y que cree tb las migracions y las factory:
php artisan make:model Post -mf
En la migration creada añadir:
$table->string('title');
$table->string('content');

En database\factories\PostFactory.php:
return [
'title' => $this->faker->sentence(),
'content' => $this->faker->text()
];

En database\seeders\DatabaseSeeder.php:
\App\Models\Post::factory(100)->create();

En app\Models\Post.php:
// para permitir la inserción masiva
protected $fillable = ['title', 'content'];

Y ya simplemente ejecutar el migrate pero q además ejecute los seeders (con sus factorys): php artisan migrate:fresh --seed

Factorys desde DatabaseSeeder.php

Cuando se crea un factory no es necesario tener que crear un seeder específico para llamarlo, se puede llamar directamente desde database\seeders\DatabaseSeeder.php: use App\Models\Post;
...
Post::factory(20)->create();

php artisan migrate:fresh --seed

Crear las tablas que necesita un blog con sus migraciones, sus seeders y sus factorys

https://www.youtube.com/watch?v=eC8rDAiT1OM&list=PLZ2ovOgdI-kX3XFj77zlvSQYhJyJSYQWr&index=3

IMPORTANTE:
1) Al crear los factorys hacerlo así:
php artisan make:factory Post y no como dice el tutorial: php artisan make:factory PostFactory
2) Al crear los factorys por defecto te crea:
protected $model = Model::class;
cambiarlo por el correspondiente:
protected $model = Post::class;
3) En UserSeeder.php al crear el usuario con Create da problemas, mejor hacerlo con DB:
DB::table('users')->insert(
            'name' => 'Pepito Pérez',
            'email' => 'pepitoperez@gmail.com',
            'password' => bcrypt('12345678')
            ]
);

Para volver a pasar de nuevo todas las migraciones, seeders y demás:
php artisan migrate:fresh --seed

Laravel 7: Seeder y Factory

php artisan make:seeder UsersTableSeeder
use App\User;
...
User::create([
   'name' => 'Pepito Pérez',
   'email' => 'pepitoperez@gmail.com',
   'password' => bcrypt('12345678')
]);

factory(User::class, 10)->create();

Si User::create da el create problemas hacerlo con insert:
DB::table('users')->insert([
            'name' => 'xxxx',
            'email' => 'xxx@gmail.com',
            'password' => bcrypt('12345678')
        ])

Más información en:
https://laravel.com/docs/7.x/seeding
Por defecto Laravel te crear el UserFactory.php:
$factory->define(User::class, function (Faker $faker) {
   return [
  nbsp;  'name' => $faker->name,
  nbsp;  'email' => $faker->unique()->safeEmail,
  nbsp;  'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
  nbsp;  'remember_token' => Str::random(10),
   ];
});


php artisan make:seeder EntriesTableSeeder
use App\Entry;
public function run()
{
   factory(Entry::class, 100)->create();
}


Crear el factory para Entry:
php artisan make:factory EntryFactory
use App\Entry;
...
$factory->define(Entry::class, function (Faker $faker) {
   return [
      'title' => $faker->sentence,
      'content' => $faker->text,
      'user_id' => 1
   ];
});

Por supuesto para que se ejecuten estos seeders hay que llamarlos desde el DatabaseSeeders.php:
public function run()
{
   $this->call(UsersTableSeeder::class);
   $this->call(EntriesTableSeeder::class);
}

Para borrar toda la BD, generarla de nuevo y que tire de los seeds:
php artisan migrate:fresh --seed

Factory

Por defecto viene creado solo un factory (el de Users), para usarlo por ejemplo:
use App\User;
...
Route::get("/crear_users_azar", function() {
    factory(User::class, 50)->create();
});

Si quisieramos rellenar otras tablas (por ejemplo provincias) debemos crear su correspondiente factory:
php artisan make:factory ProvinciaFactory

Y en dicho nuevo fichero:
use App\Provincia;
use Faker\Generator as Faker;
use Illuminate\Support\Str;

$factory->define(Provincia::class, function (Faker $faker) {
    return [
        'nombre_provincia' => $faker->name,
    ];
});

Y luego en routes/web.php
use App\Provincia;
...
Route::get("/crear_prov_azar", function() {
    factory(Provincia::class, 50)->create();
});

No solo se pueden meter nombres al azar, sino tb emails, direcciones, textos largos, colores, etcétera:

https://github.com/fzaninotto/Faker