【问题标题】:Yii Table Prefix Cannot read table with that prefixYii 表前缀无法读取具有该前缀的表
【发布时间】:2012-10-19 17:47:36
【问题描述】:

我开始在 localhost 中开发,使用 yii 1.1.11 使用自动生成应用程序,创建用户表,使用 gii 生成 crud。当我迁移到虚拟主机时,我必须为表使用前缀,因此成为“yii_users”并使用以下内容编辑配置:

'db'=>array(
  'connectionString' => 'xxxxx',
  'username' => 'xxxxx',
  'password' => 'xxxxx',
  'tablePrefix' => 'yii_',
),

但我无法再登录并收到错误“在数据库中找不到活动记录类“用户”的表“用户”。 ' 所以我假设 tablePrefix 不起作用。如何解决这个问题?

【问题讨论】:

    标签: php yii frameworks prefix


    【解决方案1】:

    这要求您也更改所有活动记录,check the guide

    信息:要使用表前缀功能,AR 类的 tableName() 方法可能会被覆盖... …… 也就是说,我们不返回完全限定的表名,而是返回不带前缀的表名并将其括在双花括号中

    所以你需要这样做:

    public function tableName() {
        return '{{user}}';
    }
    

    同样来自tablePrefix doc

    通过设置此属性,任何像 '{{tableName}}' ... 之类的标记都将替换为 'prefixTableName',其中 'prefix' 指的是此属性值。

    (强调我的)

    【讨论】:

    • 好吧,你已经给了我线索,所以一个gii生成的模型应该有一个名为“public function tableName()”的方法,我可以输入完整的表名字符串,也可以按照你所说的使用大括号.但是一旦我使用大括号,main.php 中的 db 配置就必须有'tablePrefix'。因此,即使没有前缀但使用 curl,'tablePrefix' 也必须设置为空字符串。如果已经有很多模型并且必须在每个模型中添加卷曲,那就有点麻烦了。
    • 是的,没错,而且我认为它不会以任何其他方式发生。但是,如果您想使用 tablePrefix,并且尚未生成模型,则可以修改模型模板(gii 用于模型生成)以默认使用花括号。我还没有尝试过,所以不确定最好的方法。
    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多