我有两个由ManyToMany关系链接的实体Categories和Criteria。它在数据库中生成了一个名为criteria_categories的新表。我想要做的是使用夹具填充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
?
提前感谢您的回答。
在学说中你可以忘记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]