我有两个由 ManyToMany 关系链接的实体类别和条件。它在数据库中生成了一个名为 criteria_categories 的新表。
我想要做的是使用fixture来填充entity Criteria
和表criteria_categories
。
categories table
已经有数据库中的数据。
所以我的问题是,如何从categories
获取数据并使用灯具将其插入criteria_categories table
?
我的代码如下:
标准
class Criteria
{
/**
* @ORM\ManyToMany(targetEntity="Categories", inversedBy="criteria", cascade={"persist"})
* @ORM\JoinTable(name="criteria_categories")
**/
private $categories;
}
分类
class Categories
{
/**
* @ORM\ManyToMany(targetEntity="Criteria", mappedBy="categories")
**/
private $criteria;
}
DataFixtures
class LoadCriteria extends Fixture
{
public function load(ObjectManager $manager)
{
$criteria = array(
array(
'label' => 'Test1'
),
array(
'label' => 'Test2'
)
);
$cat = new Categories();
foreach ($criteria as $critere) {
$ctr = new Criteria();
$ctr->setCriteriaLabel($critere['label']);
$manager->persist($ctr);
}
$manager->flush();
}
}
所以真正的问题是如何从类别中获取数据并在此灯具中使用它们来填充table criteria_categories
?
提前感谢您的回答。
答案 0 :(得分:1)
在学说中你可以忘记criteria_categories
表。班级criteria
的集合为categories
。不必担心幕后使用的其他表格。
但对你的问题。要从db获取所有类别,您必须将此fixture定义为服务,然后注入实体管理器或您的"包装器"服务。
class LoadCriteria extends Fixture
{
/**
* @var CategoriesRepository
*/
private $repository;
public function __construct(EntityManagerInterface $em)
{
$this->repository = $em->getRepository(Categories::class);
}
public function load(ObjectManager $manager)
{
$this->categories = $repository->findAll();
$criteria = array(
array(
'label' => 'Test1'
),
array(
'label' => 'Test2'
)
);
$cat = new Categories();
foreach ($criteria as $critere) {
$ctr = new Criteria();
$ctr->setCriteriaLabel($critere['label']);
$manager->persist($ctr);
}
$manager->flush();
}
}
如果您不使用默认服务配置,则必须手动将灯具定义为服务。
#services.yml
App\DataFixtures\ORM\CriteriaFixture:
tags: [doctrine.fixture.orm]