首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单个实体上的多个表

单个实体上的多个表
EN

Stack Overflow用户
提问于 2017-01-16 21:45:13
回答 2查看 1.4K关注 0票数 2

我们对我们目前的教条体系有一个问题。

我们希望将一个独特的实体映射到多个生成的表中。我知道这不是一个标准用法,但是我们的约束需要一些优化,我们需要按帐户划分表。

我们试图在每次查询之前在setPrimaryTable属性上调用classMetadata来更新存储库表名。但是,在第一次执行之后,我们似乎无法更新表。

工作实例:

代码语言:javascript
复制
$em = $this->getDoctrine()->getManager(); 
$productM = $em->getRepository('DataBundle:Product'); 
$classMetaData = $em->getClassMetadata('DataBundle:Product'); 
$classMetaData->setPrimaryTable(['name' => 'product_copy']); 
$productM->findAll(); // select * from product_copy; 

有问题的案件:

代码语言:javascript
复制
$em = $this->getDoctrine()->getManager(); 
$productM = $em->getRepository('DataBundle:Product'); 
$classMetaData = $em->getClassMetadata('DataBundle:Product'); 

$productM->findAll(); // select * from product; 

$classMetaData->setPrimaryTable(['name' => 'product_copy']); 
$productM->findAll(); // select * from product; 

是否有适当的解决办法来处理这一案件,以符合教义哲学?至少有可能吗?

我们看到了另一个“解决方案”深入Gidmo代码,使用AST遍历程序,但它只能处理选择的情况,而不能处理其他CRUD操作。

代码语言:javascript
复制
class FromWalker extends SqlWalker { 

    public function walkRangeVariableDeclaration($rangeVariableDeclaration) 
    { 
        $sql = parent::walkRangeVariableDeclaration($rangeVariableDeclaration); 
        // replace the table name by a custom one 
        return $sql; 
    } 
} 
EN

回答 2

Stack Overflow用户

发布于 2017-01-17 07:37:40

你查过Mapped Superclasses吗?http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

您仍然需要每个表的一个实体,但是这样可以防止代码重复。

票数 0
EN

Stack Overflow用户

发布于 2017-11-24 06:34:27

在第一次执行之后,也许您可以执行$em->clear(),然后它就可以工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41685488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档