[英]Symfony data fixtures on ManyToMany relationship
我有两个实体Categories和Criteria ,它们由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;
}
数据夹具
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();
}
}
如果不使用默认服务配置,则必须手动将夹具定义为服务。
#services.yml App\\DataFixtures\\ORM\\CriteriaFixture: tags: [doctrine.fixture.orm]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.