如何使用具有多个相同表的模型进行数据隔离?

时间:2015-03-28 12:41:13

标签: class yii2 models

我正在为小型建筑公司编写一个简单的SaaS应用程序,并尝试通过让每家公司拥有自己独特的数据表来实现中级数据隔离。

如果缺少WHERE {group_id}子句,这也很好,其他组数据也不会公开。

我可以使用命令构建器动态创建这些表,并在其前面加上grp_37645_projects这样的组号。

但是当表名改变时,我被困在如何使用我的模型类。

登录后,我想设置表名。这些不会改变,因为不允许用户成为多个组的一部分。

我已经阅读过有关更改tableName的内容,但这是一个STATIC函数,我已经阅读了一些关于动态创建类的内容,但这两个选项都没有详细或完整。

我也知道这涉及单表继承,但是再一次,每个例子都使用了一个不同的场景。

您是否有推荐的解决方案来动态设置tableNames

1 个答案:

答案 0 :(得分:1)

为tableName添加一些逻辑:

namespace app\models;

use yii\db\ActiveRecord;

class Project extends ActiveRecord
{
    /**
     * @return string the name of the table associated with this ActiveRecord class.
     */
    public static function tableName()
    {
        //some logic for getting current "group_id" for current user
        $current_group_id = \Yii::$app->user->identity->group_id;
        return 'grp_'.$current_group_id.'_projects';
    }
}