Orm 在原则2中是否有使用参考列名的方法?

Orm 在原则2中是否有使用参考列名的方法?,orm,doctrine-orm,Orm,Doctrine Orm,例如,我需要将一个值(以前创建的entites Id)分配给doctrine 2模型中的reference列 /** * @Entity @Table(name="products") */ class product { /** * * @ManyToOne(targetEntity="category") */ protected $category; public function assignCategoryId($id) {

例如,我需要将一个值(以前创建的entites Id)分配给doctrine 2模型中的reference列

/**
 * @Entity @Table(name="products")
 */
class product {

    /**
    * 
    * @ManyToOne(targetEntity="category")
    */
    protected $category;

    public function assignCategoryId($id) {
        $this->category_id=$id;
    }


}
我假设类别_id是由条令2创建的,作为引用列名,
不要问我为什么要分配id而不是对象本身,因为必须这样。有办法做到这一点吗?有什么想法吗?

要做到这一点,您需要创建一个
类别
实体,并将其分配给relationship属性

$category = $entityManager->find('category', $categoryID);

$product = new product();
$product->category = $category;

我相信,这将创建一种关系。

虽然@Orbling的答案是正确的,但实际上您不必从数据库中加载实体。相反,您可以使用引用:

// method on Product entity
public function setCategory(Category $category)
{
    $this->category = $category;
}

// then set the category on the product
$product->setCategory($entityManager->getReference('category', $categoryId));

您可以找到。

我要分配的Id已经存在。很抱歉,没有提到这一点。这意味着类别实体是以前创建的。我只想将其id分配给产品实体。在这种情况下,您可以从存储库类加载
类别,而不是创建一个新类别<代码>$category=$entityManager->find('category',$categoryID)好的,这个解决方案听起来不错,但是,因为我试图在我的项目中实现ddd和cqrs,所以我不想在实体类中使用实体管理器。我尽量保持我的实体干净。有什么想法吗?你只需要使用实体管理器来获取引用,这样你就可以使用
$category=$entityManager->getReference('category',$categoryId)
并将类别而不是categoryId传递到域中