Location: PHPKode > scripts > SQLReactor > SQLReactor-0.6/SQLReactor/engines/default/columns/ForeignKey.php
<?php
/*******************************************************************************
* Copyright 2008 Rafael Marques Martins
*
* This file is part of SQLReactor.
* 
* SQLReactor is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* 
* SQLReactor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with SQLReactor; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
* 
*******************************************************************************/

class ForeignKey extends SQLReactorCol{
	public function getCreateSQL(){
		$attributeName = $this->table->class->_attributeNames->{$this->name} . 'Id';
		$fkColName = $this->table->columns->$attributeName->name;
		$targetClassName = $this->config[ 'target' ][ 0 ];
		$targetInstance = new $targetClassName();
		$targetTableName = $targetInstance->_table->name;
		$targetFieldName = $targetInstance->_table->columns->{$this->config[ 'target' ][ 1 ] }->name;
		
        $sql = null;
        if( $this->config[ 'weakRelation' ] ) return null;
        
        $sql  = "FOREIGN KEY ( {$this->table->connection->engine->escapeName}{$fkColName}{$this->table->connection->engine->escapeName} )";
        $sql .= " REFERENCES {$this->table->connection->engine->escapeName}{$targetTableName}{$this->table->connection->engine->escapeName}";
        $sql .= " ( {$this->table->connection->engine->escapeName}{$targetFieldName}{$this->table->connection->engine->escapeName} ) ON DELETE SET NULL ON UPDATE SET NULL";
        
		return $sql;
	}
	
	public function setValueFromPHP( $obj ){
		$this->value = $obj;
		$attributeName = $this->table->class->_attributeNames->{$this->name};
		$functionName = 'set' . ucfirst( $attributeName ) . 'Id';
        
        $targetClass = $this->config[ 'target' ][ 0 ];
        $targetAttr = $this->config[ 'target' ][ 1 ];
        
        if( $targetAttr ){
            $value = $obj->$targetAttr;
        }else{
            $value = $obj->getId();
        }
        
        $this->table->class->$functionName( $value );
	}
    
    public function getValueToPHP(){
        if( $this->lazyValue ){
            $targetClass = $this->config[ 'target' ][ 0 ];
            $targetAttr = $this->config[ 'target' ][ 1 ];
            
            $target = new $targetClass();
            $list = $target->getList( array( 'filter' => array(
                array( $targetAttr, $this->lazyValue )
            ) ) );
            
            $this->lazyValue = null;
            $this->value = $list[ 0 ];
        }
        
        return $this->value;
    }
    
    public function setValueFromDB( $value ){
        $this->value = $value;
    }
    
	public function getValueToDB(){}
}
?>
Return current item: SQLReactor