如何使用具有多个相同表的模型来进行数据隔离?
How to use model with multiple identical tables, for data isolation?
我正在编写一个简单的 SaaS
应用程序供小型建筑公司使用,并试图通过让每个公司拥有自己独特的数据 table 来实现中级数据隔离我分享了。
如果缺少 WHERE {group_id}
子句,其他组数据将不会公开。
我可以使用命令生成器动态创建这些 table,并在它们前面加上组号前缀,例如 grp_37645_projects
。
但是随着 table 名称的变化,我仍然不知道如何使用我的模型 类。
登录后,我想设置table个名字。这些不会改变,因为不允许用户属于多个组。
我读过关于更改 tableName 的内容,但那是一个 STATIC
函数,我也读过一些关于动态创建 类 的内容,但这两个选项都不是详细或完整。
我也知道这涉及到单一 table 继承,但再次强调,每个示例使用的场景都略有不同。
您有动态设置 tableNames
的推荐解决方案吗?
为表名添加一些逻辑:
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';
}
}
我正在编写一个简单的 SaaS
应用程序供小型建筑公司使用,并试图通过让每个公司拥有自己独特的数据 table 来实现中级数据隔离我分享了。
如果缺少 WHERE {group_id}
子句,其他组数据将不会公开。
我可以使用命令生成器动态创建这些 table,并在它们前面加上组号前缀,例如 grp_37645_projects
。
但是随着 table 名称的变化,我仍然不知道如何使用我的模型 类。
登录后,我想设置table个名字。这些不会改变,因为不允许用户属于多个组。
我读过关于更改 tableName 的内容,但那是一个 STATIC
函数,我也读过一些关于动态创建 类 的内容,但这两个选项都不是详细或完整。
我也知道这涉及到单一 table 继承,但再次强调,每个示例使用的场景都略有不同。
您有动态设置 tableNames
的推荐解决方案吗?
为表名添加一些逻辑:
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';
}
}