amount; } public function setAmount(int $amount): ProjectFixtures { $this->amount = $amount; return $this; } public function setIsVisible(bool $visible): ProjectFixtures { $this->isVisible = $visible; return $this; } /** * @param Customer[] $customers * @return ProjectFixtures */ public function setCustomers(array $customers): ProjectFixtures { $this->customers = $customers; return $this; } /** * Will be called prior to persisting the object. * * @param callable $callback * @return ProjectFixtures */ public function setCallback(callable $callback): ProjectFixtures { $this->callback = $callback; return $this; } /** * @param ObjectManager $manager * @return Project[] */ public function load(ObjectManager $manager): array { $created = []; $customers = $this->customers; if (empty($customers)) { $customers = $this->getAllCustomers($manager); } $faker = Factory::create(); for ($i = 0; $i < $this->amount; $i++) { $visible = 0 != $i % 3; if (null !== $this->isVisible) { $visible = $this->isVisible; } $project = new Project(); $project->setName($faker->catchPhrase . ($visible ? '' : ' (x)')); $project->setBudget(rand(0, 10000)); $project->setComment($faker->text); $project->setCustomer($customers[array_rand($customers)]); $project->setVisible($visible); if (null !== $this->callback) { \call_user_func($this->callback, $project); } $manager->persist($project); $created[] = $project; } $manager->flush(); return $created; } /** * @param ObjectManager $manager * @return array */ private function getAllCustomers(ObjectManager $manager): array { $all = []; /** @var Customer[] $entries */ $entries = $manager->getRepository(Customer::class)->findAll(); foreach ($entries as $temp) { $all[$temp->getId()] = $temp; } return $all; } }