相关疑难解决方法(0)

在Doctrine 2.0实体中使用EntityManager

我有2个实体:Country(id,name)和Mapping(id,object,internalId,externalId).国家和地图未与关联相关联(因为"映射"不仅包含国家/地区的行).我需要使用以下条件获取国家/地区的外部ID:

  • country.id = mapping.internalId
  • mapping.object = 'country'

所以我计划在Country中添加函数getExternalId()

function getExternalId() {
    $em = Registry::getEntityManager();

    $mapping = $em->getRepository('Mapping')->findOneBy(array(
        'object'     => 'country',
        'internalId' => $this->getId()
    ));

    return !empty($mapping) ? $mapping->getExternalId() : false;
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 在实体中使用EntityManager是一种好习惯吗?如果不是,请解释如何在我的情况下获得外部身份证?
  2. 也许可以使用yaml文件关联Country和Mapping?

提前致谢!

entitymanager doctrine-orm

33
推荐指数
3
解决办法
3万
查看次数

doctrine额外延迟加载不能按预期工作

我有一个实体Shop和一个相关实体ShopProduct,具有以下关系:

/**
 * @ORM\OneToMany(targetEntity="ShopProduct", mappedBy="shopid", fetch="EXTRA_LAZY")
 */
private $products;
Run Code Online (Sandbox Code Playgroud)

在树枝模板,我想访问计数products,所以我访问

{{ entity.getProducts().count }}
Run Code Online (Sandbox Code Playgroud)

但是当使用symfony2探查器查看查询的数量和内容时,我发现发出了完整的选择,而不是COUNT我期望的(基于文档).

对每个Shops 发出完全选择会导致250Mb +的内存使用量和30+秒的页面加载时间,这是不希望的.

添加之后fetch="EXTRA_LAZY"我已经清除了学说缓存.

我是否忽略了某些东西,使用错误的方法或误解了文档?

[编辑]

doctrine/annotations                v1.1
doctrine/cache                      v1.0
doctrine/collections                v1.1
doctrine/common                     2.4.0-RC1
doctrine/data-fixtures              dev-master eef10f6
doctrine/dbal                       2.3.3
doctrine/doctrine-bundle            v1.2.0-beta1
doctrine/doctrine-fixtures-bundle   dev-master 275540d
doctrine/doctrine-migrations-bundle dev-master 99c0192
doctrine/inflector                  v1.0
doctrine/lexer                      v1.0
doctrine/migrations                 dev-master e1f6efc
doctrine/orm                        2.3.3
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm twig

6
推荐指数
2
解决办法
4300
查看次数

标签 统计

doctrine-orm ×2

entitymanager ×1

symfony ×1

twig ×1