private function setByTypeRelationField(string $module, CsvField $field, CsvField $moduleField) : void
    {
        if (! $this->isRelatedType($field)) {
            return;
        }

        // skip for field with type "related(Articles)" when current module is "Articles"
        if ($this->getTableName() === $field->getAssocCsvModule()) {
            return;
        }

        // skip for fields associated with Footprint behavior ('related' type fields associated with Users table)
        if ($this->isFootprintField($field) || $this->isFootprintField($moduleField)) {
            return;
        }

        $this->setAssociation(
            'belongsToMany',
            static::generateAssociationName($module, $field->getName()),
            [
                'joinTable' => Inflector::tableize($module),
                'className' => $field->getAssocCsvModule(),
                'foreignKey' => $moduleField->getName(),
                'targetForeignKey' => $field->getName()
            ]
        );
    }