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

时间:2018-03-09 13:01:34

标签: php cakephp cakephp-3.0

我已经制作了一个cakephp应用程序,但我使用的数据库是crm,我无法更改表名,所以这是一个限制。我的表名是emails_users_1_c。当我试图在模型中调用此表名时。

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

  

表' crm.emails_users1_c'不存在"。

这就是我访问该表的方式。

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

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

        $docuTable->save($docuData);
    }

1 个答案:

答案 0 :(得分:1)

不要将此类数据库表名称用作表类名称/别名,这不适用于内部应用的变形(在此特定情况下使用camelizing后跟下划线)。使用遵循CakePHP命名约定的有意义的名称,这将有助于您长期运行。

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

namespace App\Model\Table;

use Cake\ORM\Table;

class UserEmailsTable extends Table
{
    public function initialize(array $config)
    {
        $this->setTable('emails_users_1_c'); // $this->table() before CakePHP 3.4
        // ...
    }
}

如果由于某种原因无法/不应该使用具体的表类,那么请动态配置别名,以便您仍然可以轻松地重用它们:

TableRegistry::config('UserEmails', [
    'table' => 'emails_users_1_c'
]);

在任何情况下,您都应该能够通过UserEmails别名检索表类实例:

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

另见