У меня есть приложение cakephp, но база данных, которую я использую, имеет crm, и я не могу изменить имена таблиц, поэтому это ограничение. Имя моей таблицы - emails_users_1_c. Когда я попытался назвать это имя таблицы в модели.
Он добавляет 1 к пользователям и делает его documents_leads1_c. Я не знаю, почему это происходит, хотя я искал в SO и в документации, но не смог узнать.
Table 'crm.emails_users1_c' doesn't exist".
Вот как я получаю доступ к таблице.
public function makeDocument($data){
$docuTable = TableRegistry::get('emails_users_1_c');
$docuData = $docuTable->newEntity($data);
$docuTable->save($docuData);
}






Не используйте такие имена таблиц базы данных в качестве имен / псевдонимов классов таблиц, которые не работают с перегибом, применяемым внутри (в данном конкретном случае камелизация с последующим подчеркиванием). Используйте осмысленные имена, соответствующие соглашению об именах 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');
Смотрите также
@programmer Конечно, я понял это, я не говорю, что вы должны изменить имя таблицы базы данных, а имя класса таблицы PHP, соответственно псевдоним таблицы CakePHP! Оба примера делают именно это, они настраивают простые имена / псевдонимы классов, указывая при этом на нетрадиционное имя таблицы базы данных.
очень хорошо объяснено! Спасибо за помощь !
да, я знаю, что это неправильное имя, но это сделано модулем crm, поэтому я не могу его изменить, я просто интегрирую торт в crm. чтобы изменить имя таблицы, я должен пройти весь процесс настройки модуля crm. Однако, если я все еще хочу использовать, мне нужно использовать
TableRegistry::config('UserEmails', [ 'table' => 'emails_users_1_c' ]);?