我们对我们目前的教条体系有一个问题。
我们希望将一个独特的实体映射到多个生成的表中。我知道这不是一个标准用法,但是我们的约束需要一些优化,我们需要按帐户划分表。
我们试图在每次查询之前在setPrimaryTable属性上调用classMetadata来更新存储库表名。但是,在第一次执行之后,我们似乎无法更新表。
工作实例:
$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; 有问题的案件:
$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操作。
class FromWalker extends SqlWalker {
public function walkRangeVariableDeclaration($rangeVariableDeclaration)
{
$sql = parent::walkRangeVariableDeclaration($rangeVariableDeclaration);
// replace the table name by a custom one
return $sql;
}
} 发布于 2017-01-17 07:37:40
你查过Mapped Superclasses吗?http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html
您仍然需要每个表的一个实体,但是这样可以防止代码重复。
发布于 2017-11-24 06:34:27
在第一次执行之后,也许您可以执行$em->clear(),然后它就可以工作了。
https://stackoverflow.com/questions/41685488
复制相似问题