cakephp:模型忽略表名中数字前的下划线

cakephp:模型忽略表名中数字前的下划线,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我制作了一个cakephp应用程序,但我使用的数据库是crm,我无法更改表名,因此这是一个限制。我的表名是emails\u users\u 1\u c。当我试图在模型中调用此表名时 它将1附加到用户并使其成为文档\u leads1\u c我不知道为什么会发生这种情况,尽管我在文档中搜索了SO,但无法找到 表“crm.emails\u users1\u c”不存在 这就是我访问表的方式 public function makeDocument($data){ $docuTable

我制作了一个cakephp应用程序,但我使用的数据库是crm,我无法更改表名,因此这是一个限制。我的表名是
emails\u users\u 1\u c
。当我试图在模型中调用此表名时

它将
1
附加到用户并使其成为
文档\u leads1\u c
我不知道为什么会发生这种情况,尽管我在文档中搜索了SO,但无法找到

表“crm.emails\u users1\u c”不存在

这就是我访问表的方式

public function makeDocument($data){
        $docuTable = TableRegistry::get('emails_users_1_c');

        $docuData = $docuTable->newEntity($data);

        $docuTable->save($docuData);
    }

不要使用诸如表类名/别名之类的数据库表名,这与内部应用的屈折变化(在这种特定情况下,先进行驼峰化,然后加下划线)不匹配。请使用遵循CakePHP命名约定的有意义的名称,这将有助于长期使用

理想情况下,使用专有名称创建具体的表类,例如
UserEmailsTable
,并通过
\Cake\ORM\table::setTable()
配置数据库表名:

如果出于任何原因不能/不应该使用具体的表类,请动态配置别名,以便您仍然可以轻松地重用它们:

TableRegistry::config('UserEmails', [
    'table' => 'emails_users_1_c'
]);
在任何情况下,您都应该能够通过
UserEmails
别名检索表类实例:

$UserEmails = TableRegistry::get('UserEmails');
另见


是的,我知道这不是一个正确的名称,但这是由crm模块生成的,因此我无法更改它。我只是将cake集成到crm中。要更改表名,我必须完成所有crm模块自定义过程。但是,如果我仍然要使用,我必须使用
TableRegistry::config('UserEmails'),[“表”=>“电子邮件用户”\u 1\u c']);
?@程序员当然,我明白了,我不是说您应该更改数据库表名,而是PHP表类名,分别是CakePHP表别名!两个示例都是这样做的,它们配置简单的类名/别名,同时指向非传统的数据库表名。解释得很好!感谢您的帮助我们的帮助!
$UserEmails = TableRegistry::get('UserEmails');