我需要将存档数据库保存到Symfony2中的应用程序。 在其中,我将保留所有超过90天的记录。我以为我只能使用一个实体管理器(因为两个数据库都是相同的)。
首先,我不确定这是否是最好的方法/解决方案。 而且,除此之外,我不知道如何实现这个想法(我刚刚为2个数据库找到了2个实体经理)。
如果这是一个愚蠢的问题,我很抱歉,但我现在一直在为它寻找一些解决方案。
答案 0 :(得分:2)
我们使用不同的em来保存历史记录,工作正常。 代码看起来像这样。
您的配置中的某处 ...
<强> yourpath \应用\配置\ parameters.yml 强>
parameters:
database_driver: pdo_mysql
database_host: site1.ru
database_port: 3346
database_name: db1
database_user: roof
database_password: jump
database_history_driver: pdo_mysql
database_history_host: site2.ru
database_history_port: 10001
database_history_name: history
database_history_user: sea
database_history_password: deep
etc...
您的历史记录包中的某个 ...
/**
* We make history!
**/
class historyController extends Controller
{
public function showAction($historyId)
{
// get secondary manager
$emHistory = $this->getDoctrine()->getManager('history');
// get default manager
$em = $this->getDoctrine()->getManager('default');
}
}
历史记录服务
中的class HistoryBundleUtils {
protected $em;
public function __construct($arguments) {
// get secondary manager
$this->em = $arguments['entityManager']->getManager('history');
# etc...
}
}
答案 1 :(得分:1)
这是不可能的,每个实体管理器只能使用一个数据库连接the docs seem quite clear about it。
所以我认为你将不得不使用两个EM。每个都将配置一组重复的映射。你如何使用它们的细节取决于你:
我想这也取决于归档数据库的重点。如果某些建筑事物需要在不同的服务器或其他任何服务器上,那么你就像上面那样陷入困境。另一方面,如果你真的只是希望旧数据不会出现在日常查询中(没有特别要求),那么最好实现某种类型的&#34;存档&#34;标志和一个教条扩展,它可以神奇地隐藏存档的物品,直到你要求它们,非常类似于SoftDeleteable
答案 2 :(得分:1)
我不知道这是不是一个好习惯,但我已经在Symfony2中成功地为两个数据库使用了一个EM。我正在处理的项目需要访问两个数据库。但是有一些限制。首先,两个数据库的database_user和_password必须相同。您可以访问这两个数据库,但只能创建(使用控制台doctrine:database:create)并编写parameters.yml中定义的表(console doctrine:schema:update)。 您可以在两个数据库上进行读取,写入,更新,删除,但需要在模型中指定第二个数据库的数据库名称,如:
@ORM\Table(name="my_other_database.my_table")
基本上,如果一个数据库已经存在且您只需要访问它,则可以将一个EM用于两个数据库。