public function modifyTable()
    {
        $table = $this->getTable();
        $database = $table->getDatabase();
        $delegates = explode(',', $this->parameters['to']);
        foreach ($delegates as $delegate) {
            $delegate = $database->getTablePrefix() . trim($delegate);
            if (!$database->hasTable($delegate)) {
                throw new InvalidArgumentException(sprintf('No delegate table "%s" found for table "%s"', $delegate, $table->getName()));
            }
            if (in_array($delegate, $table->getForeignTableNames())) {
                // existing many-to-one relationship
                $type = self::MANY_TO_ONE;
            } else {
                // one_to_one relationship
                $delegateTable = $this->getDelegateTable($delegate);
                if (in_array($table->getName(), $delegateTable->getForeignTableNames())) {
                    // existing one-to-one relationship
                    $fks = $delegateTable->getForeignKeysReferencingTable($this->getTable()->getName());
                    $fk = $fks[0];
                    if (!$fk->isLocalPrimaryKey()) {
                        throw new InvalidArgumentException(sprintf('Delegate table "%s" has a relationship with table "%s", but it\'s a one-to-many relationship. The `delegate` behavior only supports one-to-one relationships in this case.', $delegate, $table->getName()));
                    }
                } else {
                    // no relationship yet: must be created
                    $this->relateDelegateToMainTable($this->getDelegateTable($delegate), $table);
                }
                $type = self::ONE_TO_ONE;
            }
            $this->delegates[$delegate] = $type;
        }
    }
public function modifyTable()
    {
        $table = $this->getTable();
        $database = $table->getDatabase();
        $delegates = explode(',', $this->parameters['to']);
        foreach ($delegates as $delegate) {
            $delegate = $database->getTablePrefix() . trim($delegate);
            if (!$database->hasTable($delegate)) {
                throw new InvalidArgumentException(sprintf('No delegate table "%s" found for table "%s"', $delegate, $table->getName()));
            }
            if (in_array($delegate, $table->getForeignTableNames())) {
                // existing many-to-one relationship
                $type = self::MANY_TO_ONE;
            } else {
                // one_to_one relationship
                $delegateTable = $this->getDelegateTable($delegate);
                if (in_array($table->getName(), $delegateTable->getForeignTableNames())) {
                    // existing one-to-one relationship
                    $fks = $delegateTable->getForeignKeysReferencingTable($this->getTable()->getName());
                    $fk = $fks[0];
                    if (!$fk->isLocalPrimaryKey()) {
                        throw new InvalidArgumentException(sprintf('Delegate table "%s" has a relationship with table "%s", but it\'s a one-to-many relationship. The `delegate` behavior only supports one-to-one relationships in this case.', $delegate, $table->getName()));
                    }
                } else {
                    // no relationship yet: must be created
                    $this->relateDelegateToMainTable($this->getDelegateTable($delegate), $table);
                }
                $type = self::ONE_TO_ONE;
            }
            $this->delegates[$delegate] = $type;
        }
    }
public function modifyTable ( ) { $ table = $ this -> getTable ( ) ; $ database = $ table -> getDatabase ( ) ; $ delegates = explode ( ',' , $ this -> parameters [ 'to' ] ) ; foreach ( $ delegates as $ delegate ) { $ delegate = $ database -> getTablePrefix ( ) . trim ( $ delegate ) ; if ( ! $ database -> hasTable ( $ delegate ) ) { throw new InvalidArgumentException ( sprintf ( 'No delegate table "%s" found for table "%s"' , $ delegate , $ table -> getName ( ) ) ) ; } if ( in_array ( $ delegate , $ table -> getForeignTableNames ( ) ) ) { // existing many-to-one relationship $ type = self :: MANY_TO_ONE ; } else { // one_to_one relationship $ delegateTable = $ this -> getDelegateTable ( $ delegate ) ; if ( in_array ( $ table -> getName ( ) , $ delegateTable -> getForeignTableNames ( ) ) ) { // existing one-to-one relationship $ fks = $ delegateTable -> getForeignKeysReferencingTable ( $ this -> getTable ( ) -> getName ( ) ) ; $ fk = $ fks [ 0 ] ; if ( ! $ fk -> isLocalPrimaryKey ( ) ) { throw new InvalidArgumentException ( sprintf ( 'Delegate table "%s" has a relationship with table "%s", but it\'s a one-to-many relationship. The `delegate` behavior only supports one-to-one relationships in this case.' , $ delegate , $ table -> getName ( ) ) ) ; } } else { // no relationship yet: must be created $ this -> relateDelegateToMainTable ( $ this -> getDelegateTable ( $ delegate ) , $ table ) ; } $ type = self :: ONE_TO_ONE ; } $ this -> delegates [ $ delegate ] = $ type ; } }
Lists the delegates and checks that the behavior can use them,
And adds a fk from the delegate to the main table if not already set
Lists the delegates and checks that the behavior can use them And adds a fk from the delegate to the main table if not already set