我有一个数据库,其中包括由句点动态命名的统计表: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,当我输入时,我得到一个有效的返回值,这里是'MY_TABLE_2019_06',但是当我调用$ oMyTable-> myFunction()时,请求通过createQueryBuilder()生成的内容不会改变吗? 您有解决方案或研究方向要给我吗?$ metadata-> getTableName()