PHP Symfony 固定装置和 Faker
PHP Symfony Fixtures & Faker
我开始学习 php symfony,我有一个问题。
我有两个实体:想法与另一个实体类别结合
我创建了一个固定装置来填充我的数据库,但我被困在了一个点上。这是我做的时候 ->setCategory();我如何注入随机类别(我有旅游、运动、娱乐、人际关系、其他)。
这是我开始的方式,并坚持使用 TYPE 类别的随机类别。感谢您的帮助
public function load(ObjectManager $manager)
{
// $product = new Product();
// $manager->persist($product);
$generator = Faker\Factory::create("fr_FR");
for ($i = 0; $i < 101; $i++) {
$idea = new Idea();
$idea->setTitle($generator->title);
$idea->setDescription($generator->realText(200));
$idea->setAuthor($generator->firstName);
--------- $idea->setCategory("RANDOM CATEGORY");---------
$idea->setDateCreated($generator->dateTime);
$idea->setIsPublished(true);
$manager->persist($idea);
}
$manager->flush();
}
假设您已经创建了所有类别,您可以使用存储库获取所有类别实体的数组。然后在 for
循环中打乱数组并分配第一个。
$categories = $manager->getRepository(Category::class)->findAll();
for ($i = 0; $i < 101; $i++) {
shuffle($categories);
$idea = new Idea();
...
$idea->setCategory($categories[0]);
...
$manager->persist($idea);
}
$manager->flush();
或者使用 array_rand()
你不需要调用 shuffle()
的行,它只是从数组中选择一个随机键:
$categories = $manager->getRepository(Category::class)->findAll();
for ($i = 0; $i < 101; $i++) {
$idea = new Idea();
...
$idea->setCategory($categories[array_rand($categories)]);
...
$manager->persist($idea);
}
$manager->flush();
如果您的类别是像这样的实体建议:
Here's how I started, and stuck for the random category of TYPE
Category.
...并且您的不同实体有不同的固定装置,您可以利用 DependentFixtureInterface
.
CategoryFixtures 可能看起来像这样。
<?php
namespace App\DataFixtures;
use App\Entity\Category;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Faker\Factory;
class CategoryFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$generator = Factory::create("fr_FR");
for ($i = 0; $i <= 100; $i++) {
$category = (new Category())->setName($generator->name);
$manager->persist($category);
}
$manager->flush();
}
}
然后你的 IdeaFixtures 可能看起来像这样。
<?php
namespace App\DataFixtures;
use App\Entity\Category;
use App\Entity\Idea;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Faker\Factory;
class IdeaFixtures extends Fixture implements DependentFixtureInterface
{
public function load(ObjectManager $manager)
{
$generator = Factory::create("fr_FR");
$categories = $manager->getRepository(Category::class)->findAll();
for ($i = 0; $i <= 100; $i++) {
$idea = new Idea();
$idea->setTitle($generator->title);
$idea->setDescription($generator->realText(200));
$idea->setAuthor($generator->firstName);
$idea->setCategory($generator->randomElement($categories));
$idea->setDateCreated($generator->dateTime);
$idea->setIsPublished(true);
$manager->persist($idea);
}
$manager->flush();
}
public function getDependencies(): array
{
return [CategoryFixtures::class];
}
}
这样你可以确保首先加载 CategoryFixtures
,然后你将能够获取 IdeaFixtures
中的所有类别并利用 Faker randomElement()
随机获得一个类别方法。
我开始学习 php symfony,我有一个问题。 我有两个实体:想法与另一个实体类别结合 我创建了一个固定装置来填充我的数据库,但我被困在了一个点上。这是我做的时候 ->setCategory();我如何注入随机类别(我有旅游、运动、娱乐、人际关系、其他)。 这是我开始的方式,并坚持使用 TYPE 类别的随机类别。感谢您的帮助
public function load(ObjectManager $manager)
{
// $product = new Product();
// $manager->persist($product);
$generator = Faker\Factory::create("fr_FR");
for ($i = 0; $i < 101; $i++) {
$idea = new Idea();
$idea->setTitle($generator->title);
$idea->setDescription($generator->realText(200));
$idea->setAuthor($generator->firstName);
--------- $idea->setCategory("RANDOM CATEGORY");---------
$idea->setDateCreated($generator->dateTime);
$idea->setIsPublished(true);
$manager->persist($idea);
}
$manager->flush();
}
假设您已经创建了所有类别,您可以使用存储库获取所有类别实体的数组。然后在 for
循环中打乱数组并分配第一个。
$categories = $manager->getRepository(Category::class)->findAll();
for ($i = 0; $i < 101; $i++) {
shuffle($categories);
$idea = new Idea();
...
$idea->setCategory($categories[0]);
...
$manager->persist($idea);
}
$manager->flush();
或者使用 array_rand()
你不需要调用 shuffle()
的行,它只是从数组中选择一个随机键:
$categories = $manager->getRepository(Category::class)->findAll();
for ($i = 0; $i < 101; $i++) {
$idea = new Idea();
...
$idea->setCategory($categories[array_rand($categories)]);
...
$manager->persist($idea);
}
$manager->flush();
如果您的类别是像这样的实体建议:
Here's how I started, and stuck for the random category of TYPE Category.
...并且您的不同实体有不同的固定装置,您可以利用 DependentFixtureInterface
.
CategoryFixtures 可能看起来像这样。
<?php
namespace App\DataFixtures;
use App\Entity\Category;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Faker\Factory;
class CategoryFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$generator = Factory::create("fr_FR");
for ($i = 0; $i <= 100; $i++) {
$category = (new Category())->setName($generator->name);
$manager->persist($category);
}
$manager->flush();
}
}
然后你的 IdeaFixtures 可能看起来像这样。
<?php
namespace App\DataFixtures;
use App\Entity\Category;
use App\Entity\Idea;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Faker\Factory;
class IdeaFixtures extends Fixture implements DependentFixtureInterface
{
public function load(ObjectManager $manager)
{
$generator = Factory::create("fr_FR");
$categories = $manager->getRepository(Category::class)->findAll();
for ($i = 0; $i <= 100; $i++) {
$idea = new Idea();
$idea->setTitle($generator->title);
$idea->setDescription($generator->realText(200));
$idea->setAuthor($generator->firstName);
$idea->setCategory($generator->randomElement($categories));
$idea->setDateCreated($generator->dateTime);
$idea->setIsPublished(true);
$manager->persist($idea);
}
$manager->flush();
}
public function getDependencies(): array
{
return [CategoryFixtures::class];
}
}
这样你可以确保首先加载 CategoryFixtures
,然后你将能够获取 IdeaFixtures
中的所有类别并利用 Faker randomElement()
随机获得一个类别方法。