Symfony数据夹具与ManyToMany的关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony数据夹具与ManyToMany的关系相关的知识,希望对你有一定的参考价值。
我有两个由ManyToMany关系链接的实体Categories和Criteria。它在数据库中生成了一个名为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;
}
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
?
提前感谢您的回答。
答案
在学说中你可以忘记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();
}
}
- 如果您使用symfony 3.3+中的default service configuration,您的灯具已经是一项服务。
- 如果不使用默认服务配置,则必须手动将夹具定义为服务。
#services.yml AppDataFixturesORMCriteriaFixture: tags: [doctrine.fixture.orm]
以上是关于Symfony数据夹具与ManyToMany的关系的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2-Doctrine:ManyToMany 关系未保存到数据库
Symfony 的 make:entity 命令创建的 ManyToMany 关系之间的握手
Symfony2 2.3.7 -Doctrine 2.4.1:ManyToMany 关系未保存到数据库