Symfony 2:如何避免Doctrine迁移删除会话表?

11

我对数据库迁移比较新,我试图坚持使用自动生成的迁移:

$ php app/console doctrine:migrations:diff
$ php app/console doctrine:migrations:migrate

问题在于这会删除我的sessions表。有什么方法可以避免这种情况?

3个回答

30
另一个选择是让Doctrine忽略该表。您可以按照此SO帖子中描述的方法使用schema_filter选项。
因此,如果您的表名为sessions,请在config.yml(Symfony<4)或doctrine.yaml(Symfony≥4)中添加以下内容:
doctrine:
    dbal:
      # standard database config here
      schema_filter: ~^(?!sessions)~
我们需要忽略许多表格,因此我们采取了相反的方法 - 我们告诉Doctrine只考虑以某个前缀开头的表格,并设置侦听器以确保所有受Doctrine管理的表格都有一个前缀。关于使用表格前缀的侦听器,请参阅http://docs.doctrine-project.org/en/latest/cookbook/sql-table-prefixes.html,Symfony方面也有一个SO贴子,链接在这里

1
如果您将其添加到doctrine.yaml中,我可以确认在Symfony4中这个工作得很好。 - Mark B

2

0

当你说“sessions table”时,我猜你是指PdoSessionStorage的sessions表吧?(只是为了确保我们谈论的是同一件事情 :-) )

我曾经遇到过类似的问题,唯一持久且不复杂的解决方案就是将你的sessions放在另一个数据库中(并相应地更新配置)。但这需要创建一个额外的数据库的权限。

如果你没有这个可能性,我会寻找其他的解决方案,但也许上述提到的方法适用于你 :-)


那么,您没有将所有的PdoSessionStorage内容(基本上是会话表)放入另一个数据库的可能性吗? - Manne W
是的,但我认为这会带来更多麻烦。而且我不知道是否为性能增加额外的数据库连接是好的。它会增加负担吗? - HappyDeveloper
1
你绝对不需要为了仅仅处理会话表而使用另一个专用数据库。正如@Sam在上面已经发布了答案,只需配置Doctrine忽略会话表即可。我是在2020年写这篇文章的,Sam的答案是在2013年,而这个(目前)无效的答案属于2011年;这就是为什么我不想对答案进行负投票,因为它可能在2011年是有效的。 - Lashae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接