微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Yii2中的动态表名

我有一个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;
    }

但是这样做会导致错误在不在对象上下文中时使用$this,因为函数tableName()是一个静态函数.

我怎么能这样做?任何帮助表示赞赏.谢谢!

编辑:详细的图片

假设我有ABC公司的用户.我的应用程序中有很多进程,比如PQR就是其中之一.如果ABC公司的用户登录并选择进程PQR,我需要在我的数据库中创建一个表ABC_PQR(如果不存在),或者如果已经创建了表,则加载该表.我需要将这个表名放入我的模型中.同样可能有用户和许多进程.管理数据库的最佳方法是什么.

解决方法:

由于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;
}

更新:

好吧,我的错.如果你调用一个像updateall,find等静态方法,那么构造函数就不会被调用.$table也不会被设置.所以你有不同的选择.

>在使用静态db操作方法之前手动调用构造函数.
>将静态setter添加到模型中,如公共静态函数setTableName($tableName),并在每次成功登录调用它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐