Следуя курсу, создал сущность DeveloperTable. Нужно связать эту сущность отношением многие-ко-многим (ManyToMany) с сущностью RegionTable (такая же по структуре сущность):
Код
use Bitrix\Main\ORM\Data\DataManager;
use Bitrix\Main\ORM\Fields;
class DeveloperTable extends DataManager
{
public static function getTableName()
{
return 'developer';
}
public static function getMap()
{
return [
(new Fields\Relations\ManyToMany('REGION', RegionTable::class))->configureTableName('developer_region'),
new Fields\IntegerField('ID', [
'primary' => true,
'autocomplete' => true,
]),
new Fields\TextField('NAME'),
];
}
}
Теперь вызываю: DeveloperTable::getEntity()->compileDbTableStructureDump() Выводит:
Код
array(1) {
[0]=>
string(100) "CRE ATE TABLE `developer` (`ID` int NOT NULL AUTO_INCREMENT, `NAME` text NOT NULL, PRIMARY KEY(`ID`))"
}
Естественно createDbTable() создает только одну таблицу. Как создать developer_region для связи?
Для многие ко многим у вас должно быть три таблицы, на каждую таблицу нужно будет описать сущность. Если вы хотите создать таблицу на основе уже описанной сущности, то и поля через которые будет связь осуществляться нужно тоже описать, в вашем случае это REGION_ID, DEVELOPER_ID для таблицы - связки (developer_region)
You must have chaos within you to give birth to a dancing star. Friedrich Nietzsche
Mysql query error: (1146) Table 'schema.developer_region' doesn't exist (400)
То есть, действительно, developer_region создать нужно. Используя фреймворк можно?
С region и developer - понятно. Это createDbTable(). Но согласно докам: "в ORM не придется оформлять ее (developer_region) отдельной сущностью, достаточно описать отношение специальным полем ManyToMany".
Как создать таблицу, если сущности developer_regionне существует?
Используя фреймворк - это либо методом, createtable, или запрос через query, либо все же описать сущность) ещё экстравагантный вариант - создать хайлоадблок (по сути создаст таблицу с префиксом i_). А вообще хороший вопрос составителям курса - как более корректно создавать таблицу-связку не описывая сущность. В вашем случае я бы простой запрос через админку битрикса бы сделал.
You must have chaos within you to give birth to a dancing star. Friedrich Nietzsche
Спасибо! Понятно. Ну зачем же админка если есть workbench или ssh-туннель) Не понимаю почему в документации об этом ни слова. Миграций не требую, но хотя бы упомяните в документации о том, что таблицу нужно создавать запросом, минуя средства фреймворка (если не создавать сущность, как указано в доках).