Cakephp: модель игнорирует подчеркивание в имени таблицы перед числом

У меня есть приложение 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);
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
410
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не используйте такие имена таблиц базы данных в качестве имен / псевдонимов классов таблиц, которые не работают с перегибом, применяемым внутри (в данном конкретном случае камелизация с последующим подчеркиванием). Используйте осмысленные имена, соответствующие соглашению об именах 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');

Смотрите также

да, я знаю, что это неправильное имя, но это сделано модулем crm, поэтому я не могу его изменить, я просто интегрирую торт в crm. чтобы изменить имя таблицы, я должен пройти весь процесс настройки модуля crm. Однако, если я все еще хочу использовать, мне нужно использовать TableRegistry::config('UserEmails', [ 'table' => 'emails_users_1_c' ]);?

programmer 09.03.2018 15:28

@programmer Конечно, я понял это, я не говорю, что вы должны изменить имя таблицы базы данных, а имя класса таблицы PHP, соответственно псевдоним таблицы CakePHP! Оба примера делают именно это, они настраивают простые имена / псевдонимы классов, указывая при этом на нетрадиционное имя таблицы базы данных.

ndm 09.03.2018 15:50

очень хорошо объяснено! Спасибо за помощь !

programmer 12.03.2018 07:43

Другие вопросы по теме