doctrine - Symfony 4 / Doctrine:实体上的动态表名 => 函数与 find () OK 但 createQueryBuilder () NOK
问题描述
我有一个数据库(除其他外)由按期间动态命名的统计表组成:
MY_TABLE_2019_01
MY_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()生成的请求不会改变 ?
你有解决方案或研究方向给我吗?
解决方案
推荐阅读
- gremlin - Gremlin - 同时限制遍历迭代和搜索边缘属性
- java - 如何在 Java 中刷新 Window 类的图形
- scala - Scala推断出最小上限
- html - 我怎样才能改变之间的空间
- 和
- 元素?
- laravel - 尽管定义了变量,但未定义的变量?
- c# - 如何读取作为第二个参数传递给 Environment.FailFast() 的异常?
- hyperledger-fabric - 如何在具有两个组织的网络中建立一个具有 1 个组织的联盟?
- javascript - 如何用新插件替换 less-loader 中已弃用的 javascriptEnabled 选项
- powershell - 如何将 CSV 文件的标题存储在数组中?
- angular - 如何在 Angular 上创建 Web 组件并在另一个应用程序中使用