我有两个单独的symfony项目与一个数据库。第一个项目在symfony3.2上,第二个项目在symfony2.8上。数据库是mysql。一切都在生产阶段,一切正常。
现在我在第一个项目中有一些实体类,而在第二个项目中没有。我们以前不需要第二个项目中的实体,但现在我需要在第二个项目中使用它们。
我将实体从第一个项目复制到第二个项目。我们使用注解。
之后,我检查了我的数据库,并在第二个项目上执行了命令:app/consoledoctrine:schema:update--force并获取错误:基表或视图已存在:1050表“crm\u user”已存在。如果我使用--dump sql选项(app/console)执行命令doctrine:schema:update--dump sql)我看到创建的表已经存在!
创建表crm\u user(id int auto\u increment not null。。。
因此,条令模式更新没有看到db表已经创建。如何修复?我试图清除所有的缓存(cache:clear),元数据缓存(doctrine:cache:清除元数据),查询缓存(doctrine:cache:清除查询),不成功。在这之后我也犯了同样的错误。如果我尝试验证模式,就不会有新表。当然,我不能删除表数据,因为所有的表都在生产阶段。
可能有人面临这样的问题。我很感激你的建议。
2条答案
按热度按时间lfapxunr1#
我强烈建议不要把两个不同的项目和一个数据库搞得一团糟。如果你需要这样做,那么简单地让一个成为你做修改的原则“主人”,只有在那里运行schema:update. 比这更好,更优雅的方式,将是创建一个供应商,您可以导入与 composer ,它是您的供应商。这将管理所有的数据库/存储库,并且您可以将它重新用于许多只在一个地方有代码的不同项目。
这将解决这个问题,并修复我认为您做得不对的地方:让重复的实体指向相同的db结构,这将始终是一个痛苦的维护,而且它不能很好地处理kiss原则和代码复制。
cyvaqqii2#
如果您不能像jason建议的那样通过composer使用共享项目包含orm定义,那么您可以创建一个regex来过滤每个应用程序应该关注哪些表。
zend expressive示例:
动态。。。