我有一个 Yii2 模型,它使用多个具有相同结构的表。表名将根据登录的用户而变化,并且表名非常唯一,并且取决于用户名。我如何动态地将这个表名分配给模型?到目前为止我已经这样做了。
在我的模型中:
protected $table;
public function __construct($table)
{
$this->table='custom_risk_assignment_table';//logic to obtain the table name goes here
}
public static function tableName()
{
return $this->table;
}
但这样做会导致错误Using $this when not in object context
since function tableName()
is a static
功能。
那我该怎么办?感谢任何帮助。提前致谢!
编辑:详细图片
假设我有一位来自 ABC 公司的用户。我的申请中有很多流程,PQR 就是其中之一。如果 ABC 公司的用户登录并选择进程 PQR,我需要在我的数据库中创建一个表 ABC_PQR(如果不存在)或加载该表(如果已创建)。我需要这个表名到我的模型中。同样,可能存在用户和许多进程。管理数据库的最佳方法是什么。
Since tableName
是一个静态方法(正如错误消息所说),您无权访问非静态属性。 (你不能使用$this
关键词)
所以你必须声明一个静态属性:
protected static $table;
public function __construct($table)
{
self::$table = $table;
}
public static function tableName()
{
return self::$table;
}
/* UPDATE */
public static function setTableName($table)
{
self::$table = $table;
}
UPDATE:
好吧,我的错。如果您调用静态方法,则构造函数将不会被调用updateAll
, find
等等以及$table
不会被设置。所以你有不同的选择。
- 在使用静态数据库操作方法之前手动调用构造函数。
- 向模型添加静态设置器,例如
public static function setTableName($tableName)
并在每次成功登录时调用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)