/**
  * Get the relation reference count.
  *
  * @param ForeignKey $fkey   The foreign key
  * @param int        $max    The maximum count
  * @return int
  */
 protected function getRelationReferenceCount($fkey, $max = null)
 {
     $count = 0;
     $tablename = $fkey->getOwningTable()->getRawTableName();
     foreach ($this->getTable()->getManyToManyRelations() as $relation) {
         // $relation key => reference (ForeignKey), refTable (Table)
         if ($this->checkReferenceTableName($relation['refTable'], $tablename)) {
             $count++;
         }
         if ($max && $count == $max) {
             break;
         }
     }
     return $count;
 }
 /**
  * Inject relation.
  *
  * @param \MwbExporter\Model\ForeignKey $foreignKey
  */
 public function injectRelation(ForeignKey $foreignKey)
 {
     foreach ($this->relations as $_relation) {
         if ($_relation->getId() === $foreignKey->getId()) {
             return;
         }
     }
     $this->relations[] = $foreignKey;
 }
 /**
  * Get foreign key join annotation. If foreign key is composite
  * JoinColumns returned, otherwise JoinColumn returned.
  *
  * @param \MwbExporter\Model\ForeignKey $fkey  Foreign key
  * @param boolean $owningSide  Is join for owning side or vice versa
  * @return \MwbExporter\Object\Annotation
  */
 protected function getJoins(ForeignKey $fkey, $owningSide = true)
 {
     $joins = array();
     $lcols = $owningSide ? $fkey->getForeigns() : $fkey->getLocals();
     $fcols = $owningSide ? $fkey->getLocals() : $fkey->getForeigns();
     $onDelete = $this->getFormatter()->getDeleteRule($fkey->getParameters()->get('deleteRule'));
     for ($i = 0; $i < count($lcols); $i++) {
         $joins[] = $this->getAnnotation('JoinColumn', array('name' => $this->quoteIdentifier($lcols[$i]->getColumnName()), 'referencedColumnName' => $this->quoteIdentifier($fcols[$i]->getColumnName()), 'nullable' => $lcols[$i]->getNullableValue(), 'onDelete' => $onDelete));
     }
     return count($joins) > 1 ? $this->getAnnotation('JoinColumns', array($joins), array('multiline' => true, 'wrapper' => ' * %s')) : $joins[0];
 }
 /**
  * Check if foreign key owner tablename matched.
  *
  * @param \MwbExporter\Model\ForeignKey $foreign    The foreign key
  * @param string     $tablename  The table name
  * @return bool
  */
 protected function checkForeignKeyOwnerTableName($foreign, $tablename)
 {
     return $this->checkReferenceTableName($foreign ? $foreign->getReferencedTable() : null, $tablename);
 }
 /**
  * Get foreign key join descriptor.
  *
  * @param \MwbExporter\Model\ForeignKey $fkey  Foreign key
  * @param string $owningSide  Is join for owning side or vice versa
  * @return array
  */
 protected function getJoins(ForeignKey $fkey, $owningSide = true)
 {
     $joins = array();
     $lcols = $owningSide ? $fkey->getForeigns() : $fkey->getLocals();
     $fcols = $owningSide ? $fkey->getLocals() : $fkey->getForeigns();
     $onDelete = $this->getFormatter()->getDeleteRule($fkey->getParameters()->get('deleteRule'));
     for ($i = 0; $i < count($lcols); $i++) {
         $joins[] = array('name' => $lcols[$i]->getColumnName(), 'referencedColumnName' => $fcols[$i]->getColumnName(), 'nullable' => $lcols[$i]->isNotNull() ? false : null, 'onDelete' => $onDelete);
     }
     return count($joins) > 1 ? array('joinColumns' => $this->convertJoinColumns($joins)) : array('joinColumn' => $joins[0]);
 }
 /**
  * Add foreign key reference.
  *
  * @param \MwbExporter\Model\ForeignKey $foreign
  */
 public function markAsForeignReference(ForeignKey $foreign)
 {
     $this->foreigns[$foreign->getId()] = $foreign;
 }