有没有办法使用Symfony2:
EntityManager::getReference($entityName, $id)
使用除主键之外的其他字段?
一些代码:
我有一个实体:
class Category
{
/**
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id", type="integer")
*/
protected $id;
/**
* @ORM\Id()
* @ORM\Column(name="my_id", type="integer", nullable=false)
*/
protected $myId;
/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="child")
* @ORM\JoinTable(
* name="tcb_category_relations",
* joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="parent_category_id", referencedColumnName="id")}
* )
*/
protected $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
*/
protected $child;
与自身有很多关系。这样,我制作了树形结构。
问题是,$ myId对于 static 更为重要 - 此ID不是自动生成的。因此,在导入数据的情况下,whoose可能看起来像这个csv:
| my_id | my_id_parent | | 1 | 0 | | 4 | 1 | | 5 | 1 | | 7 | 5 | \ my_id could be unique! | 7 | 4 | / | 8 | 7 |
MyId不是唯一的,因为任何类别都可以有多个父母。所以我不能用它作为我的主键。我需要使用myId找到Category
的引用,因为在数据导入时我需要在每次插入单个类别后每次运行$em->find()
时刷新实体管理器。
当然我可以使用$em->getReference()
,但它基于主键,我不知道数据导入中的pk。