Source for file Nest.php
Documentation is available at Nest.php
* $Id: Self.php 1434 2007-05-22 15:57:17Z zYne $
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>.
* Doctrine_Relation_Association_Self
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @category Object Relational Mapping
* @link www.phpdoctrine.com
* @version $Revision: 1434 $
* @author Konsta Vesterinen <kvesteri@cc.hut.fi>
.
' FROM '.
$this->definition['refTable']->getTableName()
.
' FROM '.
$this->definition['refTable']->getTableName()
$dql =
'FROM ' .
$this->definition['table']->getComponentName()
.
'.' .
$this->definition['refTable']->getComponentName()
.
' WHERE ' .
$this->definition['table']->getComponentName()
.
'.' .
$this->definition['table']->getIdentifier()
.
' || ' .
$this->definition['table']->getComponentName()
.
'.' .
$this->definition['table']->getIdentifier()
$dql =
'FROM '.
$this->definition['refTable']->getComponentName()
.
'.' .
$this->definition['table']->getComponentName()
.
' WHERE '.
$this->definition['refTable']->getComponentName()
.
'.' .
$this->definition['local'] .
' IN (' .
$sub .
')';
public function fetchRelatedFor(Doctrine_Record $record)
$id = $record->getIncremented();
if (empty($id) || ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
return new Doctrine_Collection($this->getTable());
$q = new Doctrine_Query();
$c = $this->getTable()->getComponentName();
$c2 = $this->getAssociationTable()->getComponentName();
->innerJoin($c . '.' . $c2)
$sub = 'SELECT ' . $this->getForeign()
. ' WHERE ' . $this->getLocal()
$id =
$record->getIncremented();
if (empty($id) ||
! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) {
$tableName =
$record->getTable()->getTableName();
$identifier =
$record->getTable()->getIdentifier();
$condition[] =
$tableName .
'.' .
$identifier .
' IN (' .
$sub .
')';
$joinCondition[] =
$tableName .
'.' .
$identifier .
' = ' .
$assocTable .
'.' .
$this->getForeign();
$condition[] =
$tableName .
'.' .
$identifier .
' IN (' .
$sub2 .
')';
$joinCondition[] =
$tableName .
'.' .
$identifier .
' = ' .
$assocTable .
'.' .
$this->getLocal();
$q->select('{'.
$tableName.
'.*}, {'.
$assocTable.
'.*}')
->from($tableName .
' INNER JOIN ' .
$assocTable .
' ON ' .
implode(' OR ', $joinCondition))
->where(implode(' OR ', $condition));
$q->addComponent($tableName, $record->getTable()->getComponentName());
$q->addComponent($assocTable, $record->getTable()->getComponentName().
'.' .
$this->getAssociationFactory()->getComponentName());
$params =
($this->definition['equal']) ?
array($id, $id) :
array($id);
return $q->execute($params);