cakephp:模型忽略表名中数字前的下划线
我制作了一个cakephp应用程序,但我使用的数据库是crm,我无法更改表名,因此这是一个限制。我的表名是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
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');
另见
TableRegistry::config('UserEmails'),[“表”=>“电子邮件用户”\u 1\u c']);
?@程序员当然,我明白了,我不是说您应该更改数据库表名,而是PHP表类名,分别是CakePHP表别名!两个示例都是这样做的,它们配置简单的类名/别名,同时指向非传统的数据库表名。解释得很好!感谢您的帮助我们的帮助!
$UserEmails = TableRegistry::get('UserEmails');