我刚开始使用 Codeigniter 的 Doctrine。
我有一个名为 Material 的实体,它与另一个名为 elementCombination 的实体之间存在一对一关系。
要检索所有材料,我使用此代码
$query = $this->doctrine->em->getRepository('Entities\Material')->createQueryBuilder('m');
$materials = $query->getQuery()->getResult();
当我使用 getCombination() 函数查找每种材料的元素(ElementCombination 实体)时,对于所有“材料”,我总是得到相同的结果,实际上它看起来像是合并结果,因为一种材料可能比其他材料具有更多的元素。这很奇怪,对我来说。
我通过这样做,重新查询或刷新每种材料的组合来“修复”这个问题:
foreach ($materials as $key => $material)
{
$this->doctrine->em->flush();
$this->doctrine->em->clear();
//$m_combination_1 is a ArrayCollection of ElementCombination
$m_combination_1= $this->doctrine->em->getRepository('Entities\ElementCombination')->findBy(array('material' => $material->getId()));
$material->setCombination($m_combination_1);
}
我看到这不是一个好方法,所以,我想知道这种行为是否正常?,我做错了什么?
yml 实体是这样的。
材料
Entities\Material:
type: entity
table: materials
oneToMany:
similars:
targetEntity: Similar
mappedBy: parent
combination:
targetEntity: ElementCombination
mappedBy: material
.....
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
.....
和元素组合
Entities\ElementCombination:
type: entity
table: element_combinations
manyToOne:
material:
targetEntity: Material
inversedBy: combination
fields:
symbol:
type: string
length: 3
nullable: false
id: true
maxValue:
type: decimal
precision: 6
nullable: false
column: max_value
minValue:
type: decimal
precision: 6
nullable: false
column: min_value
avgValue:
type: decimal
precision: 6
nullable: false
column: avg_value
提前致谢。
编辑:
我找到了解决方案(我想)架构是错误的,我已经改成了这个,我可以去掉代码中的很多东西
Entities\Material:
type: entity
table: materials
oneToMany:
similars:
targetEntity: Similar
mappedBy: parent
manyToMany:
combination:
targetEntity: ElementCombination
inversedBy: materials
cascade: {"remove" , "persist"}
joinTable:
name: material_element_combinations
joinColumns:
material_id:
referencedColumnName: id
inverseJoinColumns:
element_combination_id:
referencedColumnName : id
uniqueConstraints:
material_index:
columns:
- reference
- inner_name
对于元素组合
Entities\ElementCombination:
type: entity
table: element_combinations
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
symbol:
type: string
length: 3
nullable: false
maxValue:
type: decimal
precision: 6
nullable: false
column: max_value
minValue:
type: decimal
precision: 6
nullable: false
column: min_value
avgValue:
type: decimal
precision: 6
nullable: false
column: avg_value
问候