我正在尝试实现 Multi-Tenancy 应用程序,即
-单个数据库中所有客户端的数据
-每个共享表都有一个tenant_id
字段来分隔数据
我希望通过添加where('tenant_id = ', $user->getTenantID())
{pseudoc-code}实现数据分离
所有SELECT查询
我没有预先找到任何解决方案,但是这里有我正在考虑的可能方法。
1)粗暴的做法:
自定义每个类中的所有fetchAll
和fetchOne
函数(我会发疯的!)
2)使用监听器:
可能为preDqlSelect
事件编码,并将“where”添加到所有查询中
3)覆盖buildQuery
():找不到前端的示例
4)实现contentformfilter
:再次需要一个指针
希望有人能验证这些结果并在功效,适用性方面发表评论。
同样,如果有人通过另一种策略实现了 Multi-Tenancy ,请分享。谢谢
最佳答案
我正在通过编码preDqlSelect事件来设计一个使用Doctrine Record Listeners的解决方案。我认为这是用通用的方式做事的最佳和最简便的方法,而不是必须修改每个Table类并编写可识别Tenant的查询。使用侦听器, Multi-Tenancy 将对开发人员完全透明。
感谢您的参与。