【发布时间】:2018-03-14 15:45:26
【问题描述】:
我有一个数据库,其中存储了一些固定值,例如产品类别。当我创建一个新产品并想为其分配一个类别时,我会这样做:
$categories = new ProductCategoryRepository();
$category = $categories->find(ProductCategory::EXAMPLE);
$product = new Product();
$product->setCategory($category);
但是,我不确定为什么我必须一直查找数据库才能获取我的应用已经知道的静态实体。
静态分配类别就足够了。也许是这样的:
$category = ProductCategory::EXAMPLE;
现在 Doctrine 应该使用正确的 ID(由 ProductCategory 类描述(可能是实体?))保持关系,并且我不再需要在数据库中查找静态属性。
我还不知道该怎么做。我可以一直创建新实体,但这似乎不正确,因为这些值已经存储在数据库中,并且它们始终是相同的,不是新实体。
$category = new ProductCategory::EXAMPLE;
然而,从产品中获取关系应该将属性作为实体返回:
$category = $product->getCategory();
return $category instanceof ProductCategory; // true
有没有办法实现这种行为?
这更像是一个架构问题,而不是性能调整。我不想多次描述信息(db 条目、php 常量、实体关系等)。
【问题讨论】:
-
Doctrine ORM 层处理对象,所以我认为您几乎无法使用类别对象。然而,有一个 EntityManager::getReference('ProductCategory',$id) 方法,它返回一个仅包含 id 的引用类别对象。因此,它减少了正在传输的数据。 docs.doctrine-project.org/projects/doctrine-orm/en/latest/…
标签: php laravel doctrine-orm