Exemplo n.º 1
0
 public function test_defaults_will_be_remembered_for_many_to_many()
 {
     $manyToMany = $this->builder->createManyToMany('otherManyToMany', StubEntity::class);
     $manyToMany->setJoinTable('default_join_table');
     $manyToMany->build();
     $this->assertEquals('default_join_table', $this->builder->getClassMetadata()->getAssociationMapping('otherManyToMany')['joinTable']['name']);
     $override = $this->override('otherManyToMany', function (ManyToMany $relation) {
         return $relation;
     });
     $override->build();
     $this->assertEquals('default_join_table', $this->builder->getClassMetadata()->getAssociationMapping('otherManyToMany')['joinTable']['name']);
 }
Exemplo n.º 2
0
 /**
  * @param ClassMetadataBuilder $metadataBuilder
  * @param FieldConfigId        $fieldId
  * @param string               $targetEntity
  * @param FieldConfigId|null   $targetFieldId
  * @param string[]             $cascade
  */
 protected function buildManyToManyOwningSideRelation(ClassMetadataBuilder $metadataBuilder, FieldConfigId $fieldId, $targetEntity, FieldConfigId $targetFieldId = null, array $cascade = [])
 {
     $builder = $metadataBuilder->createManyToMany($fieldId->getFieldName(), $targetEntity);
     if ($targetFieldId) {
         $builder->inversedBy($targetFieldId->getFieldName());
     }
     $builder->setJoinTable($this->nameGenerator->generateManyToManyJoinTableName($fieldId->getClassName(), $fieldId->getFieldName(), $targetEntity));
     foreach ($cascade as $cascadeType) {
         $builder->{'cascade' . ucfirst($cascadeType)}();
     }
     $builder->build();
     $extendFieldConfig = $this->extendConfigProvider->getConfigById($fieldId);
     if (!$extendFieldConfig->is('without_default')) {
         $this->buildDefaultRelation($metadataBuilder, $fieldId, $targetEntity);
     }
 }
 public function testCreateManyToMany()
 {
     $this->assertIsFluent($this->builder->createManyToMany('groups', 'Doctrine\\Tests\\Models\\CMS\\CmsGroup')->setJoinTable('groups_users')->addJoinColumn('group_id', 'id', true, false, 'CASCADE')->addInverseJoinColumn('user_id', 'id')->cascadeAll()->fetchExtraLazy()->build());
     $this->assertEquals(array('groups' => array('fieldName' => 'groups', 'targetEntity' => 'Doctrine\\Tests\\Models\\CMS\\CmsGroup', 'cascade' => array(0 => 'remove', 1 => 'persist', 2 => 'refresh', 3 => 'merge', 4 => 'detach'), 'fetch' => 4, 'joinTable' => array('joinColumns' => array(0 => array('name' => 'group_id', 'referencedColumnName' => 'id', 'nullable' => true, 'unique' => false, 'onDelete' => 'CASCADE', 'columnDefinition' => NULL)), 'inverseJoinColumns' => array(0 => array('name' => 'user_id', 'referencedColumnName' => 'id', 'nullable' => true, 'unique' => false, 'onDelete' => NULL, 'columnDefinition' => NULL)), 'name' => 'groups_users'), 'type' => 8, 'mappedBy' => NULL, 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => 'Doctrine\\Tests\\Models\\CMS\\CmsUser', 'isCascadeRemove' => true, 'isCascadePersist' => true, 'isCascadeRefresh' => true, 'isCascadeMerge' => true, 'isCascadeDetach' => true, 'isOnDeleteCascade' => true, 'relationToSourceKeyColumns' => array('group_id' => 'id'), 'joinTableColumns' => array(0 => 'group_id', 1 => 'user_id'), 'relationToTargetKeyColumns' => array('user_id' => 'id'), 'orphanRemoval' => false)), $this->cm->associationMappings);
 }
 /**
  * @param ConfigInterface $config
  * @param ClassMetadataBuilder $cmBuilder
  */
 protected function prepareRelations(ConfigInterface $config, ClassMetadataBuilder $cmBuilder)
 {
     if ($config->is('relation')) {
         foreach ($config->get('relation') as $relation) {
             /** @var FieldConfigId $fieldId */
             if ($relation['assign'] && ($fieldId = $relation['field_id'])) {
                 /** @var FieldConfigId $targetFieldId */
                 $targetFieldId = $relation['target_field_id'];
                 $targetFieldName = $targetFieldId ? ExtendConfigDumper::FIELD_PREFIX . $targetFieldId->getFieldName() : null;
                 $fieldName = ExtendConfigDumper::FIELD_PREFIX . $fieldId->getFieldName();
                 $defaultName = ExtendConfigDumper::DEFAULT_PREFIX . $fieldId->getFieldName();
                 switch ($fieldId->getFieldType()) {
                     case 'manyToOne':
                         $builder = $cmBuilder->createManyToOne($fieldName, $relation['target_entity']);
                         if ($targetFieldName) {
                             $builder->inversedBy($targetFieldName);
                         }
                         $builder->addJoinColumn($fieldName . '_id', 'id', true, false, 'SET NULL');
                         $builder->cascadeDetach();
                         $builder->build();
                         break;
                     case 'oneToMany':
                         /** create 1:* */
                         $builder = $cmBuilder->createOneToMany($fieldName, $relation['target_entity']);
                         $builder->mappedBy($targetFieldName);
                         $builder->cascadeDetach();
                         $builder->build();
                         /** create 1:1 default */
                         $builder = $cmBuilder->createOneToOne($defaultName, $relation['target_entity']);
                         $builder->addJoinColumn($defaultName . '_id', 'id', true, false, 'SET NULL');
                         $builder->build();
                         break;
                     case 'manyToMany':
                         if ($relation['owner']) {
                             $builder = $cmBuilder->createManyToMany($fieldName, $relation['target_entity']);
                             if ($targetFieldName) {
                                 $builder->inversedBy($targetFieldName);
                             }
                             $builder->setJoinTable(ExtendHelper::generateManyToManyJoinTableName($fieldId, $relation['target_entity']));
                             $builder->build();
                             $builder = $cmBuilder->createOneToOne($defaultName, $relation['target_entity']);
                             $builder->addJoinColumn($defaultName . '_id', 'id', true, false, 'SET NULL');
                             $builder->build();
                         } else {
                             $cmBuilder->addInverseManyToMany($fieldName, $relation['target_entity'], $targetFieldName);
                         }
                         break;
                 }
             }
         }
     }
 }
Exemplo n.º 5
0
 /**
  * @param ClassMetadataBuilder $metadataBuilder
  * @param FieldConfigId        $fieldId
  * @param array                $relation
  */
 protected function buildManyToManyOwningSideRelation(ClassMetadataBuilder $metadataBuilder, FieldConfigId $fieldId, array $relation)
 {
     $targetEntity = $relation['target_entity'];
     $cascade = !empty($relation['cascade']) ? $relation['cascade'] : [];
     $builder = $metadataBuilder->createManyToMany($fieldId->getFieldName(), $targetEntity);
     if (!empty($relation['target_field_id'])) {
         $builder->inversedBy($relation['target_field_id']->getFieldName());
     }
     $builder->setJoinTable($this->nameGenerator->generateManyToManyJoinTableName($fieldId->getClassName(), $fieldId->getFieldName(), $targetEntity));
     foreach ($cascade as $cascadeType) {
         $builder->{'cascade' . ucfirst($cascadeType)}();
     }
     $builder->build();
 }