Symfony 4 /原理:实体上的动态表名称=>使用find()函数,但createQueryBuilder()NOK

问题描述 投票:0回答:1

我有一个数据库,其中包括由句点动态命名的统计表:MY_TABLE_2019_01MY_TABLE_2019_02...MY_TABLE_2019_10

此想法是创建单个实体并动态管理它。

我设法通过设置表名来动态处理对实体的调用。使用find()方法时,没有问题,名称更改正确完成,并且可以在控制器中进行多次更改而不会遇到错误,但是,由于调用了[[createQueryBuilder() ,仅考虑初始配置,之后不考虑表名的更改,但是执行了clear()吗?

问题:为什么使用find()

可以进行更改,但不能使用createQueryBuilder()进行更改? 我的代码

我的实体,经典但没有表名

namespace App\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Table() * @ORM\Entity(repositoryClass="App\Repository\MyTableRepository") */ class MyTable { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(name="ID", type="integer") */ private $id;

案例N°1,它有效! :)

在我的控制器中:

$oEntityManager = $this->getDoctrine()->getManager(); $metadata = $oEntityManager->getClassMetadata(MyTable::class); $metadata->setPrimaryTable(array('name' => 'MY_TABLE_2019_02')); //-- Dynamically manage the table echo $metadata->getTableName(); //-- 'MY_TABLE_2019_02' //-- $oMyTable = $oEntityManager->getRepository(MyTable::class); //-- $aRetour = $oMyTable->find(1); //-- SELECT ... FROM MY_TABLE_2019_02... OK $oMyTable->clear(); //-- $metadata->setPrimaryTable(array('name' => 'MY_TABLE_2019_06')); //-- Dynamically manage the table echo $metadata->getTableName(); //-- 'MY_TABLE_2019_06' OK $aRetour = $oMyTable->find(1); //-- SELECT ... FROM MY_TABLE_2019_06... OK ! IS GOOD :)

案例N°2,它不起作用! :(

在我的存储库中:

public function myFunction(): array { $oRequete = $this->createQueryBuilder('c')->setMaxResults(10); return $oRequete->getQuery() ->getResult(); }

在我的控制器中:

$oEntityManager = $this->getDoctrine()->getManager(); $metadata = $oEntityManager->getClassMetadata(MyTable::class); $metadata->setPrimaryTable(array('name' => 'MY_TABLE_2019_02')); //-- Dynamically manage the table echo $metadata->getTableName(); //-- 'MY_TABLE_2019_02' OK //-- $oMyTable = $oEntityManager->getRepository(MyTable::class); //-- $aRetour = $oMyTable->myFunction(); //-- SELECT ... FROM MY_TABLE_2019_02... OK $oMyTable->clear(); //-- $metadata->setPrimaryTable(array('name' => 'MY_TABLE_2019_06')); //-- Dynamically manage the table echo $metadata->getTableName(); //-- 'MY_TABLE_2019_06' OK !!!! $aRetour = $oMyTable->myFunction(); //-- SELECT ... FROM MY_TABLE_2019_02... NOK !!!!!!!!! table name not change here !?

在这种情况下2,当我输入

$ metadata-> getTableName()

时,我得到一个有效的返回值,这里是'MY_TABLE_2019_06',但是当我调用$ oMyTable-> myFunction()时,请求通过createQueryBuilder()生成的内容不会改变吗? 您有解决方案或研究方向要给我吗?
doctrine symfony4
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.