我有两个实体类别和标准,它们通过多对多关系链接。它在数据库中生成了一个名为 criteria_categories 的新表。我想做的是使用夹具填充entity Criteria
和桌子criteria_categories
。categories table
数据库中已有数据。
所以我的问题是,如何从categories
获取数据并使用夹具将它们插入criteria_categories table
?
我的代码如下:
标准
class Criteria
{
/**
* @ORMManyToMany(targetEntity="Categories", inversedBy="criteria", cascade={"persist"})
* @ORMJoinTable(name="criteria_categories")
**/
private $categories;
}
类别
class Categories
{
/**
* @ORMManyToMany(targetEntity="Criteria", mappedBy="categories")
**/
private $criteria;
}
数据夹具
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
?
提前感谢您的回答。
在教义上,你可以忘记criteria_categories
桌子上。类criteria
有一个categories
集合。无需担心幕后使用的其他表。
但是对于你的问题。要从数据库中获取所有类别,您必须将此夹具定义为服务,然后注入实体管理器或"包装器"服务。
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();
}
}
- 如果您使用symfony 3.3+的默认服务配置,则您的灯具已经是服务。
如果不使用默认服务配置,则必须手动将夹具定义为服务。
#services.yml AppDataFixturesORMCriteriaFixture: tags: [doctrine.fixture.orm]