i'm trying to make fake data with faker on symfony.
I have 2 entities Brand and Model with OneToMany relation :
/**
* @ORM\OneToMany(targetEntity=Model::class, mappedBy="brand")
*/
private $models;
/**
* @ORM\ManyToOne(targetEntity=Brand::class, inversedBy="models")
* @ORM\JoinColumn(nullable=false)
*/
private $brand;
The goal is to match the good brand with a specific model. For example, when model it's 911 or 356 brand has to be Porsche.
Here my fixture :
public function load(ObjectManager $manager): void
{
$faker = Factory::create('fr_FR');
$brands = ['Porsche', 'Chevrolet', 'Aston Martin', 'Ferrari'];
foreach ($brands as $brand) {
$newBrand = new Brand();
$newBrand->setName($brand);
$manager->persist($newBrand);
$models = [911, 356, 'Corvette', 'Camaro', 'V8', 'DB4', 328, 'F430'];
foreach ($models as $model) {
$newModel = new Model();
if ($model == 911 || $model == 356) {
$newModel->setBrand($newBrand);
} elseif ($model == 'Corvette' || $model == 'Camaro') {
$newModel->setBrand();
} elseif ($model == 'V8' || $model == 'DB4') {
$newModel->setBrand();
} else {
$newModel->setBrand();
}
$newModel->setTransmission($faker->randomElement(['manual', 'automatic']))
->setName($model);
for ($i=1; $i<=6; $i++) {
$newModel->setImage("model$i.jpg");
}
$newModel->setColor($faker->randomElement(['red', 'black', 'yellow', 'blue']))
->setFuelType($faker->randomElement(['diesel fuel', 'gasoline', 'ethanol']))
->setPrice($faker->numberBetween($min=20000, $max=150000));
$manager->persist($newModel);
}
}
$manager->flush();
}
I simplified my code to achieve my goal, here is my function :
public function load(ObjectManager $manager): void
{
$faker = Factory::create('fr_FR');
$brands = ['Porsche', 'Chevrolet', 'Aston Martin', 'Ferrari'];
$brand1 = new Brand();
$brand1->setName('Porsche');
$manager->persist($brand1);
$brand2 = new Brand();
$brand2->setName('Chevrolet');
$manager->persist($brand2);
$brand3 = new Brand();
$brand3->setName('Aston Martin');
$manager->persist($brand3);
$brand4 = new Brand();
$brand4->setName('Ferrari');
$manager->persist($brand4);
$models = [911, 356, 'Corvette', 'Camaro', 'V8', 'DB4', 328, 'F430'];
foreach ($models as $model) {
$newModel = new Model();
if ($model == 911 || $model == 356) {
$newModel->setBrand($brand1);
} elseif ($model == 'Corvette' || $model == 'Camaro') {
$newModel->setBrand($brand2);
} elseif ($model == 'V8' || $model == 'DB4') {
$newModel->setBrand($brand3);
} else {
$newModel->setBrand($brand4);
}
$newModel->setTransmission($faker->randomElement(['manual', 'automatic']))
->setName($model);
for ($i=1; $i<=6; $i++) {
$newModel->setImage("model$i.jpg");
}
$newModel->setColor($faker->randomElement(['red', 'black', 'yellow', 'blue']))
->setFuelType($faker->randomElement(['diesel fuel', 'gasoline', 'ethanol']))
->setPrice($faker->numberBetween($min=20000, $max=150000));
$manager->persist($newModel);
}