Usare le factory dei Modelli

Adesso che siamo in grado di utilizzare i metodi base dei modelli di Eloquent, facciamo un piccolo esercizio: generiamo la factory del modello Car e creiamo un seeder per popolare la relativa tabella. Abbiamo già visto in precedenza le Factory, quando abbiamo utilizzato quella del modello User per inserire qualche utente nel database.

Creiamo la factory

php artisan make:factory Car

Apriamo la nuova factory e impostiamo il metodo definition() in questo modo

use Carbon\Carbon;
public function definition()
{
    return [
    'license_plate' => fake()->unique()->bothify('#######'),
    'registered_at' => Carbon::today()->subDays(rand(0, 365))
    ];
}

Ora creiamo il seeder

php artisan make:seeder GenerateSomeFakeCars

Apriamo il seeder e definiamo un semplice costrutto, dove estraiamo tutti i records della tabella car_models, li cicliamo e per ogni iterazione creiamo un numero di records variabile per la tabella cars, sfruttando la factory che abbiamo appena creato

namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Car;
use App\Models\CarModel;
class GenerateSomeFakeCars extends Seeder
{
    /**
    * Run the database seeds.
    * @return void
    * @throws \Exception
    */
    public function run()
    {
        $car_models = CarModel::all();
        foreach ($car_models as $car_model) {
            Car::factory()->count(random_int(2, 5))->create(['car_model_id' => $car_model->id]);
        }
    }
}

Ora non ci resta che far girare questa classe, come abbiamo imparato a fare nel capitolo dedicato ai seeders.

Faremo ancora qualche altro esercizio con le Factory in quanto ci resta da popolare qualche tabella, Ma lo faremo sfruttando le relazioni di Eloquent, argomento del prossimo capitolo.