【问题标题】:CodeIgniter DataMapper table name override not workingCodeIgniter DataMapper 表名覆盖不起作用
【发布时间】:2016-04-20 22:15:40
【问题描述】:

我刚刚使用 CodeIgniter 设置了 DataMapper,并根据需要编写了模型。

但是我似乎遗漏了一些东西,因为当我运行查询时,DataMapper 看不到表名覆盖并认为根本没有表。

有趣的是,如果我删除了覆盖,它会正常工作(尽管有一个错误说自动生成的表格不存在)。

型号代码:

class Activity extends Datamapper {

var $table = 'activity_log';

var $has_one = [
    'user'
]; 

}

控制器代码:

$activity = new Activity(1);

错误:

Error Number: 1064 
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right
syntax to use near 'WHERE `.`id` = 1' at line 2

SELECT * WHERE `.`id` = 1

如上所述,如果我删除 var $tables = 'activity_log';然后它将推迟到应有的查找表“活动”。

【问题讨论】:

    标签: php mysql codeigniter datamapper


    【解决方案1】:

    规则

    DataMapper 模型必须命名为对象的单数版本 名称,首字母大写。所以对于一个用户对象, DataMapper 模型将被命名为 User。该模型应该有一个 数据库中对应的表命名为小写,复数 对象名称的版本。因此,对于名为 User 的 DataMapper 模型, 表将被命名为用户。对于名为 Country 的 DataMapper 模型, 表将被命名为国家。

    在大多数情况下,单数和复数版本之间的区别 对象名称的名称只需在末尾添加字母 s 即可。

    您的模型应命名为Activity_log

    Docs.

    【讨论】:

    • 不幸的是,这并没有解决任何问题。即使模型名称为 activity_log 并且模型被更改为 Activity_log 它仍然失败。我知道 datamapper 通常如何引用数据库,但我也知道覆盖此行为(使用 var $table = 'activity_log')。我的问题是,当存在覆盖时,表在查询发生之前被设置为 null
    • var 是不推荐使用的关键字。尝试使用 public(可见性)关键字。
    • 恐怕没什么变化。
    • DataMapper 是否将下划线解释为连接表之间的连接字符串?如果表和类被命名为activitylog怎么办?
    • 我从另一个我正在研究的项目中知道,Datamapper 可以支持表名中的下划线。我不希望更改任何表名,因为这会破坏覆盖的整个要点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2014-04-03
    • 1970-01-01
    • 2012-10-18
    • 2015-03-16
    相关资源
    最近更新 更多