我正在为小型建筑公司编写一个简单的SaaS
应用程序,并尝试通过让每家公司拥有自己独特的数据表来实现中级数据隔离。
如果缺少WHERE {group_id}
子句,这也很好,其他组数据也不会公开。
我可以使用命令构建器动态创建这些表,并在其前面加上grp_37645_projects
这样的组号。
但是当表名改变时,我被困在如何使用我的模型类。
登录后,我想设置表名。这些不会改变,因为不允许用户成为多个组的一部分。
我已经阅读过有关更改tableName的内容,但这是一个STATIC
函数,我已经阅读了一些关于动态创建类的内容,但这两个选项都没有详细或完整。
我也知道这涉及单表继承,但是再一次,每个例子都使用了一个不同的场景。
您是否有推荐的解决方案来动态设置tableNames
?
答案 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';
}
}