From be7deeed610871839ba166a5d4c8237e5cdbe864 Mon Sep 17 00:00:00 2001 From: xue <> Date: Tue, 4 Dec 2007 18:59:48 +0000 Subject: Active Record now supports query criteria for implicitly declared related properties --- framework/Data/DataGateway/TSqlCriteria.php | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'framework/Data/DataGateway') diff --git a/framework/Data/DataGateway/TSqlCriteria.php b/framework/Data/DataGateway/TSqlCriteria.php index d073cd10..a17ac0c6 100644 --- a/framework/Data/DataGateway/TSqlCriteria.php +++ b/framework/Data/DataGateway/TSqlCriteria.php @@ -51,6 +51,7 @@ class TSqlCriteria extends TComponent $this->_parameters->copyFrom((array)$parameters); $this->_ordersBy=new TAttributeCollection; $this->_ordersBy->setCaseSensitive(true); + $this->setCondition($condition); } @@ -68,7 +69,14 @@ class TSqlCriteria extends TComponent */ public function setCondition($value) { - $this->_condition=$value; + if(!empty($value) && preg_match('/ORDER\s+BY\s+(.*?)$/i',$value,$matches)>0) + { + // condition contains ORDER BY, we need to strip it output + $this->_condition=substr($value,0,strpos($value,$matches[0])); + $this->setOrdersBy($matches[1]); + } + else + $this->_condition=$value; } /** @@ -107,13 +115,23 @@ class TSqlCriteria extends TComponent } /** - * @param ArrayAccess ordering clause. + * @param mixed ordering clause. */ public function setOrdersBy($value) { - if(!(is_array($value) || $value instanceof ArrayAccess)) - throw new TException('value must be array or ArrayAccess'); - $this->_ordersBy->copyFrom($value); + if(is_array($value) || $value instanceof Traversable) + $this->_ordersBy->copyFrom($value); + else + { + $value=trim(preg_replace('/\s+/',' ',(string)$value)); + $orderBys=array(); + foreach(explode(',',$value) as $orderBy) + { + $vs=explode(' ',trim($orderBy)); + $orderBys[$vs[0]]=isset($vs[1])?$vs[1]:'asc'; + } + $this->_ordersBy->copyFrom($orderBys); + } } /** -- cgit v1.2.3