ragnar_ok
@ragnar_ok

Bitrix D7 ORM: как организвать отношение многие-ко-многим (ManyToMany/N:M)?

Следуя курсу, создал сущность 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) "CREATE TABLE `developer` (`ID` int NOT NULL AUTO_INCREMENT, `NAME` text NOT NULL, PRIMARY KEY(`ID`))"
}

Естественно createDbTable() создает только одну таблицу. Как создать developer_region для связи?
  • Вопрос задан
  • 1883 просмотра
Решения вопроса 1
ragnar_ok
@ragnar_ok Автор вопроса
Нужно в ручную запрашивать линкующую таблицу. Средствами фреймворка на сегодня это не предусмотрено.
CREATE TABLE `developer_region` (
  `developer_id` int(11) NOT NULL,
  `region_id` int(11) NOT NULL,
  PRIMARY KEY (`developer_id`,`region_id`),
  CONSTRAINT `FK_developer` FOREIGN KEY (`region_id`) REFERENCES `region` (`id`),
  CONSTRAINT `FK_region` FOREIGN KEY (`developer_id`) REFERENCES `developer` (`id`)
);

Либо описывать сущность линкующей таблицы и использовать createDbTable()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы