Source for file Association.php

Documentation is available at Association.php

  1. <?php
  2. /*
  3.  *  $Id: Association.php 2212 2007-08-11 18:24:19Z nightfreak $
  4.  *
  5.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  6.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  7.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  9.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16.  *
  17.  * This software consists of voluntary contributions made by many individuals
  18.  * and is licensed under the LGPL. For more information, see
  19.  * <http://www.phpdoctrine.com>.
  20.  */
  21. Doctrine::autoload('Doctrine_Relation');
  22. /**
  23.  * Doctrine_Relation_Association    this class takes care of association mapping
  24.  *                         (= many-to-many relationships, where the relationship is handled with an additional relational table
  25.  *                         which holds 2 foreign keys)
  26.  *
  27.  *
  28.  * @package     Doctrine
  29.  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
  30.  * @category    Object Relational Mapping
  31.  * @link        www.phpdoctrine.com
  32.  * @since       1.0
  33.  * @version     $Revision: 2212 $
  34.  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
  35.  */
  36. {
  37.     /**
  38.      * @return Doctrine_Table 
  39.      */
  40.     public function getAssociationFactory()
  41.     {
  42.         return $this->definition['refTable'];
  43.     }
  44.     public function getAssociationTable()
  45.     {
  46.         return $this->definition['refTable'];
  47.     }
  48.     /**
  49.      * getRelationDql
  50.      *
  51.      * @param integer $count 
  52.      * @return string 
  53.      */
  54.     public function getRelationDql($count$context 'record')
  55.     {
  56.         $component $this->definition['refTable']->getComponentName();
  57.         switch ($context{
  58.             case "record":
  59.                 $sub  substr(str_repeat("?, "$count),0,-2);
  60.                 $dql  'FROM ' $this->getTable()->getComponentName();
  61.                 $dql .= '.' $component;
  62.                 $dql .= ' WHERE ' $this->getTable()->getComponentName()
  63.                 . '.' $component '.' $this->definition['local'' IN (' $sub ')';
  64.                 break;
  65.             case "collection":
  66.                 $sub  substr(str_repeat("?, "$count),0,-2);
  67.                 $dql  'FROM ' $component '.' $this->getTable()->getComponentName();
  68.                 $dql .= ' WHERE ' $component '.' $this->definition['local'' IN (' $sub ')';
  69.                 break;
  70.         }
  71.  
  72.         return $dql;
  73.     }
  74.     /**
  75.      * fetchRelatedFor
  76.      *
  77.      * fetches a component related to given record
  78.      *
  79.      * @param Doctrine_Record $record 
  80.      * @return Doctrine_Record|Doctrine_Collection
  81.      */
  82.     public function fetchRelatedFor(Doctrine_Record $record)
  83.     {
  84.         $id $record->getIncremented();
  85.         if (empty($id|| $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
  86.             $coll new Doctrine_Collection($this->getTable());
  87.         else {
  88.             $coll Doctrine_Query::create()->parseQuery($this->getRelationDql(1))->execute(array($id));
  89.         }
  90.         $coll->setReference($record$this);
  91.         return $coll;
  92.     }
  93. }