Роман Грицук, метод createTable прекрасно создате таблицу и все работает. Проблемы начались когда я попыталась удалить таблицу методом dropTable. Тут-то и выяснилось что static::getTableName() возвращает пустую строку. Если в классе определить getTableName, он конечно работает. Но если сделать так:
public static function getTableName()
{
return parent::getTableName();
}
Тоже закономерно пустая строка.
При этом static::getEntity()->createDbTable(); - создает таблицу какую надо.
Я посмотрела - он вызывает compileDbTableStructureDump где для получения имени таблицы использует getDBTableName, который возвращает свойство dbTableName.
Я посмотрела реализацию getTableName:
public static function getTableName()
{
return null;
}
Так что ничего удивительного что он возвращает '';
Роман Грицук, сделала пока так в init.php - \Bitrix\Main\Loader::registerAutoLoadClasses(null, ['\My\Foo\BarTable' => '/local/lib/my/foo/bar.php']);
Работает. Спасибо.
Далее встает вопрос - а как создавать таблицы? Я честно говоря в тайне надеялась, что таблица будет создана тоже автоматически, в случае если не будет обнаружена, но оказалось что нет. Мне ее создать вручную или есть какой-то общепринятый способ?
Роман Грицук, т.е. имеется ввиду, что класс будет загружен автоматически только в случае если модуль установлен и подключен?
Понятно. Вопрос про наилучшее расположение и способ загрузки остается открытым.
Но хорошо - если не модуль (решение не предполагает распространение и будет использоваться в одном проекте), то как лучше всего подключать классы сущностей? Каковы best practice?
> Сущность D7 это обычный класс. Для того чтобы все работало надо этот класс подключить.
Это я понимаю. Я с D7 впервые столкнулась.
Я разместила класс в модуле, потому что так написано в уроке. И там написано, что класс будет загружен автоматически и мне не нужно заботится о его подключении, или регистрации в автолойдере.
Выходит это не так и фраза "После чего система автоматически будет подключать файл при нахождении вызовов класса BookTable." полностью неправда? Или что-то необходимо сделать чтобы оно заработало?
Class 'CUpdateClient' not found (0)
/home/bitrix/ext_www/ipm-rostov.ru/bitrix/modules/main/admin/php_command_line.php(138) : eval()'d code:2
#0: eval
/home/bitrix/ext_www/ipm-rostov.ru/bitrix/modules/main/admin/php_command_line.php:138
#1: require_once(string)
/home/bitrix/ext_www/ipm-rostov.ru/bitrix/admin/php_command_line.php:2
ElijahTr, очень интересно - спасибо! Если не найду онлайн решения - так и сделаю. Хотелось бы максимально просто - у это конторы сейчас сезон и на меня повесили рефакторинг крупного проекта и еще почему пару лендингов я должна сделать, а тут еще и статом сегодня огорошили, поэтому хотелось бы чего попроще. 22:58 а я работаю...
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Тоже закономерно пустая строка.
При этом static::getEntity()->createDbTable(); - создает таблицу какую надо.
Я посмотрела - он вызывает compileDbTableStructureDump где для получения имени таблицы использует getDBTableName, который возвращает свойство dbTableName.
Я посмотрела реализацию getTableName:
Так что ничего удивительного что он возвращает '';