【发布时间】:2015-07-15 15:31:42
【问题描述】:
我正在尝试实现一个多租户应用程序。我有不同的客户使用相同的代码。但是每个客户都有自己的入口脚本和自己的配置。客户 ID 可通过 Yii::$app->params['customerId'] 访问。注意:我必须以这种方式区分客户,因为没有登录/身份验证。无论如何,假设调用了控制器操作并使用参数给出了客户 ID。
现在我有一些表格,每个表格都有一个客户 ID 列。我已经用 gii 创建了模型类,一切都很好。但是现在我遇到了一个问题,我必须检查或告诉每个数据库操作必须使用哪个客户 ID。因此,在每个数据库操作(查询)中,我都可以添加一个->andWhere(['customerId' => Yii::$app->params['customerId']])。当然,这是乏味且容易出错的。
有没有办法简化这个?考虑有查找、插入、更新、删除和连接操作。我可能可以使用Customized query classes,但我不知道我必须在那里做什么,我不确定它是否有助于插入/更新/删除。还要考虑存在具有相同客户 ID 列的相关表。 hasMany() 和 hasOne() 也应该反映这一点。
我的目标是让客户 ID 尽可能透明。我不想去想它。所以我可以想象某种抽象查询类,它使用某个列(客户 ID 列)进行所有操作,并以某种方式获取客户 ID(注入或使用Yii::$app->params['customerId'])。
我的假设是我需要主要在模型中执行此操作。我认为控制器不太关心这个话题。
有什么建议吗?
【问题讨论】:
标签: activerecord model yii2 multi-tenant