我有一个使用Doctrine的项目。我想在多个客户的服务器上运行相同的代码。唯一的问题是,有些表有不同的名称。不幸的是,不仅前缀不同。例如,用户表在一个数据库中为a_user
,在另一个数据库中为user_table
,但我想使用的列是相同的。
是否可以从环境变量中读取实体表名称?我不知道如何解决这个问题,因为它必须在注释中定义,如下所示:
/**
* @ORM\Entity
* @ORM\Table(name="tablename")
*/
如果我在每个客户代码中手动更改注释中的表名,那么它可以正常工作。但我想避免这个
答案 0 :(得分:1)
您的EntityManager
应该采用getClassMetadata
方法(因为它实现了ObjectManager
接口)。此方法将返回ClassMetadata
实例,该实例允许您访问类的配置,包括带有getTableName
的基础表名:
$entityManager->getClassMetadata('App\Models\YourEntity')->getTableName();