使用除主键之外的其他字段在Doctrine中使用getReference()

时间:2015-09-15 13:42:06

标签: symfony doctrine entity lazy-loading

有没有办法使用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。

0 个答案:

没有答案