This topic contains 4 replies, has 3 voices, and was last updated by Christoph Köpernick 6 years, 11 months ago.
- Topic
I either don’t understand addManyToOneInverseRelation() or may have found a bug in EntityExtendBundle/ExtendExtension->addManyToOneInverseRelation().
Instead of:
123$this->checkColumnsExist($targetTable, $targetTitleColumnNames);$this->checkColumnsExist($targetTable, $targetDetailedColumnNames);$this->checkColumnsExist($targetTable, $targetGridColumnNames);This works for me:
123$this->checkColumnsExist($table, $targetTitleColumnNames);$this->checkColumnsExist($table, $targetDetailedColumnNames);$this->checkColumnsExist($table, $targetGridColumnNames);Reproduce:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113<?phpnamespace Riq\Bundle\MigrationBundle\Migrations\Schema;use Doctrine\DBAL\Schema\Schema;use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtension;use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtensionAwareInterface;use Oro\Bundle\EntityExtendBundle\EntityConfig\ExtendScope;use Oro\Bundle\MigrationBundle\Migration\Migration;use Oro\Bundle\MigrationBundle\Migration\QueryBag;class AddCustomFieldMigration implements Migration, ExtendExtensionAwareInterface{protected $extendExtension;public function setExtendExtension(ExtendExtension $extendExtension){$this->extendExtension = $extendExtension;}public function up(Schema $schema, QueryBag $queries){//Create new entity ContactDataField$contactDataFieldTable = $this->extendExtension->createCustomEntityTable($schema,'ContactDataField',['dataaudit' => ['auditable' => 1],]);$contactDataFieldTable->addColumn('alias','string',['length' => 255,'oro_options' => ['extend' => ['owner' => ExtendScope::OWNER_CUSTOM],'dataaudit' => ['auditable' => 1],]]);$contactDataFieldTable->addColumn('title','string',['length' => 255,'oro_options' => ['extend' => ['owner' => ExtendScope::OWNER_CUSTOM],'dataaudit' => ['auditable' => 1],]]);//Create new entity ContactData$contactDataTable = $this->extendExtension->createCustomEntityTable($schema,'ContactData',['dataaudit' => ['auditable' => 1],]);$contactDataTable->addColumn('value','string',['length' => 255,'oro_options' => ['extend' => ['owner' => ExtendScope::OWNER_CUSTOM],'dataaudit' => ['auditable' => 1],]]);$contactDataTable->addColumn('quality_score','float',['oro_options' => ['extend' => ['owner' => ExtendScope::OWNER_CUSTOM],'dataaudit' => ['auditable' => 1],]]);//Relation ContactData to ContactDataField$this->extendExtension->addManyToOneRelation($schema,$contactDataTable, // owning side table'field', // owning side field name$contactDataFieldTable, // target side table'title', // column name is used to show related entity['extend' => ['owner' => ExtendScope::OWNER_CUSTOM, 'without_default' => true]]);$this->extendExtension->addManyToOneInverseRelation($schema,$contactDataTable, // owning side table'field', // owning side field name$contactDataFieldTable, // target side table'data', // target side field name['value'], // column names are used to show a title of related entity['value'], // column names are used to show detailed info about related entity['value'], // Column names are used to show related entity in a grid['extend' => ['owner' => ExtendScope::OWNER_CUSTOM]]);}}Without bugfix mentioned above, it yields the following error when running
1php app/console oro:migration:load --dry-run --show-queries:
123456List of migrations:> Oro\Bundle\EntityExtendBundle\Migration\LoadEntityConfigStateMigrationSELECT e.class_name, e.data FROM oro_entity_config eSELECT e.class_name, f.field_name, f.data FROM oro_entity_config e INNER JOIN oro_entity_config_field f ON f.entity_id = e.id> Riq\Bundle\MigrationBundle\Migrations\Schema\AddCustomFieldMigrationERROR: There is no column with name 'value' on table 'oro_ext_contactdatafield'.If the folling parameters of addManyToOneInverseRelation()
123array $targetTitleColumnNames,array $targetDetailedColumnNames,array $targetGridColumnNames,would really meant to be from $targetTable, EntityConfig would be incorrect. Incorrect example using “title” from $contactDataFieldTable instead “value” from $contactDataTable:
1234567891011$this->extendExtension->addManyToOneInverseRelation($schema,$contactDataTable, // owning side table'field', // owning side field name$contactDataFieldTable, // target side table'data', // target side field name['title'], // column names are used to show a title of related entity['title'], // column names are used to show detailed info about related entity['title'], // Column names are used to show related entity in a grid['extend' => ['owner' => ExtendScope::OWNER_CUSTOM]]);This example migrates, but yields errors in the CRM application “Field ContactData::title is not configurable”. When I have a look at the Entity Management and relations I see that neither of the 3 select menus has a selected item. Simply because “title” is not available in “ContactData”, but “value” is.
Please correct me if I totally misunderstood the desired behaviour of addManyToOneInverseRelation() or maybe fix this bug.
The forum ‘OroPlatform – Installation/Technical Issues or Problems’ is closed to new topics and replies.