From 38c18b2d740f61e342f00bc33791f0f3c014e126 Mon Sep 17 00:00:00 2001 From: wei <> Date: Sun, 22 Apr 2007 00:28:36 +0000 Subject: Update to Active Record to use Mysql 4. Add TActiveRecordRelation --- framework/Data/DataGateway/TDataGatewayCommand.php | 26 +++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'framework/Data/DataGateway') diff --git a/framework/Data/DataGateway/TDataGatewayCommand.php b/framework/Data/DataGateway/TDataGatewayCommand.php index dbabd2b7..43a57aa7 100644 --- a/framework/Data/DataGateway/TDataGatewayCommand.php +++ b/framework/Data/DataGateway/TDataGatewayCommand.php @@ -177,6 +177,18 @@ class TDataGatewayCommand extends TComponent return $this->onExecuteCommand($command,$command->query()); } + public function findAllByIndex($criteria,$fields,$values) + { + $index = $this->getIndexKeyCondition($fields,$values); + if(strlen($where = $criteria->getCondition())>0) + $criteria->setCondition("({$index}) AND ({$where})"); + else + $criteria->setCondition($index); + $command = $this->getFindCommand($criteria); + $this->onCreateCommand($command, $criteria); + return $this->onExecuteCommand($command,$command->query()); + } + /** * @param array multiple primary key values or composite value arrays * @return integer number of rows affected. @@ -190,6 +202,14 @@ class TDataGatewayCommand extends TComponent return $this->onExecuteCommand($command,$command->execute()); } + protected function getIndexKeyCondition($fields,$values) + { + $columns = array(); + foreach($fields as $field) + $columns[] = $this->getTableInfo()->getColumn($field)->getColumnName(); + return '('.implode(', ',$columns).') IN '.$this->quoteTuple($values); + } + /** * Construct a "pk IN ('key1', 'key2', ...)" criteria. * @param array values for IN predicate @@ -216,11 +236,7 @@ class TDataGatewayCommand extends TComponent throw new TDbException('dbtablegateway_pk_value_count_mismatch', $this->getTableInfo()->getTableFullName()); } - - $columns = array(); - foreach($primary as $key) - $columns[] = $this->getTableInfo()->getColumn($key)->getColumnName(); - return '('.implode(', ',$columns).') IN '.$this->quoteTuple($values); + return $this->getIndexKeyCondition($primary, $values); } /** -- cgit v1.2.3