예제 #1
0
 public function testRegisterModelWithLinkedHasManyModelsToSelfRegistersLinkModel()
 {
     $hasMany1 = new HasManyField('field', 'tableWithLinkToSelf');
     $model1 = $this->createModel('tableWithLinkToSelf', array($hasMany1));
     $this->register->registerModel($model1);
     $linkModelName = 'tableWithLinkToSelftableWithLinkToSelf';
     $linkModel = $this->register->getModel($linkModelName);
     $linkModelTable = $linkModel->getMeta()->getModelTable();
     $fields = $linkModelTable->getFields();
     $this->assertEquals($linkModelName, $hasMany1->getLinkModelName());
     $found = array();
     foreach ($fields as $field) {
         if ($field->getName() == 'tableWithLinkToSelf1') {
             $this->assertEquals('tableWithLinkToSelf', $field->getRelationModelName());
         }
         if ($field->getName() == 'tableWithLinkToSelf2') {
             $this->assertEquals('tableWithLinkToSelf', $field->getRelationModelName());
         }
         $found[] = $field->getName();
     }
     $this->assertEquals(array('id', 'tableWithLinkToSelf1', 'tableWithLinkToSelf2'), $found);
 }
예제 #2
0
 /**
  * Gets the link model name for a many to many relation
  * @param zibo\library\orm\definition\field\HasManyField $field1
  * @param zibo\library\orm\definition\field\HasManyField $field2
  * @param zibo\library\orm\model\meta\ModelMeta $modelMeta Meta of the model of the field
  * @param string $fieldName Field for the link model
  * @return string Name of the link model
  * @throws zibo\library\orm\exception\ModelException when field1 and field2 have the link model set but they are not the same
  */
 private function getManyToManyLinkModelName(HasManyField $field1, HasManyField $field2, ModelMeta $modelMeta, $fieldName)
 {
     $linkModelName1 = $field1->getLinkModelName();
     $linkModelName2 = $field2->getLinkModelName();
     if ($linkModelName1 && $linkModelName2) {
         if ($linkModelName1 != $linkModelName2) {
             throw new ModelException('Link model names of ' . $field1->getName() . ' and ' . $field2->getName() . ' are not equal');
         }
         return $linkModelName1;
     }
     if ($linkModelName1) {
         return $linkModelName1;
     }
     if ($linkModelName2) {
         return $linkModelName2;
     }
     $modelName1 = $field1->getRelationModelName();
     $modelName2 = $field2->getRelationModelName();
     $linkModelName = $this->generateLinkModelName($modelName1, $modelName2);
     return $this->getUniqueLinkModelName($modelMeta, $fieldName, $linkModelName);
 }