Пример #1
0
 /**
  * Adds a RelationMap to the table
  *
  * @param  string                          $name          The relation name
  * @param  string                          $tablePhpName  The related table name
  * @param  integer                         $type          The relation type (either RelationMap::MANY_TO_ONE, RelationMap::ONE_TO_MANY, or RelationMAp::ONE_TO_ONE)
  * @param  array                           $joinConditionMapping Arrays in array defining a normalize join condition [[':foreign_id', ':id', '='], [':foreign_type', 'value', '=']]
  * @param  string                          $onDelete      SQL behavior upon deletion ('SET NULL', 'CASCADE', ...)
  * @param  string                          $onUpdate      SQL behavior upon update ('SET NULL', 'CASCADE', ...)
  * @param  string                          $pluralName    Optional plural name for *_TO_MANY relationships
  * @param  boolean                         $polymorphic    Optional plural name for *_TO_MANY relationships
  *
  * @return RelationMap the built RelationMap object
  */
 public function addRelation($name, $tablePhpName, $type, $joinConditionMapping = [], $onDelete = null, $onUpdate = null, $pluralName = null, $polymorphic = false)
 {
     // note: using phpName for the second table allows the use of DatabaseMap::getTableByPhpName()
     // and this method autoloads the TableMap if the table isn't loaded yet
     $relation = new RelationMap($name);
     $relation->setType($type);
     $relation->setOnUpdate($onUpdate);
     $relation->setOnDelete($onDelete);
     $relation->setPolymorphic($polymorphic);
     if (null !== $pluralName) {
         $relation->setPluralName($pluralName);
     }
     // set tables
     if (RelationMap::MANY_TO_ONE === $type) {
         $relation->setLocalTable($this);
         $relation->setForeignTable($this->dbMap->getTableByPhpName($tablePhpName));
     } else {
         $relation->setLocalTable($this->dbMap->getTableByPhpName($tablePhpName));
         $relation->setForeignTable($this);
     }
     // set columns
     foreach ($joinConditionMapping as $map) {
         list($local, $foreign) = $map;
         $relation->addColumnMapping($this->getColumnOrValue($local, $relation->getLocalTable()), $this->getColumnOrValue($foreign, $relation->getForeignTable()));
     }
     $this->relations[$name] = $relation;
     return $relation;
 }