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.