我已经制作了一个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);
}
答案 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');
另见