Source for file lmbARQuery.class.php
Documentation is available at lmbARQuery.class.php
* @link http://limb-project.com
* @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
* @license LGPL http://www.gnu.org/copyleft/lesser.html
lmb_require('limb/dbal/src/query/lmbSelectRawQuery.class.php');
lmb_require('limb/active_record/src/lmbARRecordSetAttachDecorator.class.php');
lmb_require('limb/active_record/src/lmbARRecordSetJoinDecorator.class.php');
function __construct($base_class_name_or_obj, $conn, $sql =
'', $magic_params =
array())
$this->base_object =
new $this->base_class_name(null, $conn);
parent :: __construct($conn);
parent :: __construct($sql, $conn);
function eagerJoin($relation_name, $params =
array())
//should be removed before release
return $this->eagerJoin($relation_name, $params);
function eagerAttach($relation_name, $params =
array())
//should be removed before release
protected function _addFieldsForObject($object, $table_name =
'', $prefix =
'', $magic_params =
array())
if(isset
($magic_params['fields']) &&
is_array($magic_params['fields']))
$object->setLazyAttributesExcept($magic_params['fields']);
$lazy_attributes =
$object->getLazyAttributes();
if(isset
($magic_params['with_lazy_attributes']))
if(!is_array($magic_params['with_lazy_attributes']))
$lazy_attributes =
array();
$lazy_attributes =
array_diff($lazy_attributes, $magic_params['with_lazy_attributes']);
$fields =
$object->getDbTable()->getColumnsForSelect($table_name, $lazy_attributes, $prefix);
foreach($fields as $field =>
$alias)
$this->addField($field, $alias);
$rs =
parent :: getRecordSet();
function fetch($decorate =
true)
protected function _applyJoins($base_object, $joins, $parent_relation_name =
'')
$joins =
array($joins =>
array());
if($parent_relation_name)
$prefix =
$parent_relation_name .
'__';
$parent_relation_name =
$base_object->getTableName();
foreach($joins as $relation_name =>
$params)
$relation_info =
$base_object->getRelationInfo($relation_name);
if(!$relation_info ||
!isset
($relation_info['class']))
throw
new lmbException('Relation info "' .
$relation_name .
'" not found in "' .
get_class($base_object) .
'" or does not contain "class" property');
$class_name =
$relation_info['class'];
$object =
new $class_name(null, $this->_conn);
$this->_addFieldsForObject($object, $prefix .
$relation_name, $prefix .
$relation_name .
'__', $params);
$relation_type =
$base_object->getRelationType($relation_name);
$this->addLeftJoin($object->getTableName(),
$object->getPrimaryKeyName(),
$prefix .
$relation_name);
$this->addLeftJoin($object->getTableName(),
$base_object->getPrimaryKeyName(),
$prefix .
$relation_name);
throw
new lmbARException('"' .
$relation_name .
'" has a wrong relation type for JOIN operation');
if(isset
($params['join']))
$this->_applyJoins($object, $params['join'], $prefix .
$relation_name);
static function create($class_name, $params =
array(), $conn =
null, $sql =
'')
$object =
new $class_name;
$query =
new lmbARQuery($class_name, $conn, $sql, $params);
if(isset
($params['criteria']) &&
$params['criteria'])
$has_class_criteria =
false;
if(isset
($params['class']))
$filter_object =
new $params['class'];
$criteria =
$filter_object->addClassCriteria($criteria);
$has_class_criteria =
true;
$object->addClassCriteria($criteria);
$query->where($criteria);
$sort_params =
(isset
($params['sort']) &&
$params['sort']) ?
$params['sort'] :
$object->getDefaultSortParams();
$query->order($sort_params);
if(isset
($params['group']) &&
$params['group'])
$query->group($params['group']);
$join =
(isset
($params['join']) &&
$params['join']) ?
$params['join'] :
array();
foreach($join as $relation_name=>
$params_or_relation_name)
$query->eagerJoin(trim($params_or_relation_name));
$query->eagerJoin(trim($relation_name), $params_or_relation_name);
$attach =
(isset
($params['attach']) &&
$params['attach']) ?
$params['attach'] :
array();
foreach($attach as $relation_name =>
$params_or_relation_name)
$query->eagerAttach(trim($params_or_relation_name));
$query->eagerAttach(trim($relation_name), $params_or_relation_name);
Documentation generated on Wed, 07 Jan 2009 03:47:22 +0300 by phpDocumentor 1.3.2