Ticket #3287: sfPropelFinderPlugin.php.diff
| File sfPropelFinderPlugin.php.diff, 4.6 kB (added by jug, 9 months ago) |
|---|
-
sfPropelFinderPlugin/lib/sfPropelFinder.php
old new 17 17 protected $relations = null; 18 18 protected $latestQuery = ''; 19 19 20 /*! 21 * Array of conditions... 22 */ 23 protected $criterions = array(); //JG 24 20 25 public function __construct($class = '') 21 26 { 22 27 $this->criteria = new Criteria(); … … 51 56 52 57 public function getCriteria() 53 58 { 54 return $this->criteria; 59 return $this->buildCriteria(); //JG 60 // return $this->criteria; 55 61 } 56 62 57 63 public function setCriteria($criteria) 58 64 { 59 65 $this->criteria = $criteria; 66 $this->criterions = array(); //JG: Sould we do that ? 60 67 return $this; 61 68 } 62 69 63 70 public function reinitCriteria() 64 71 { 65 $this->criteria = new Criteria(); 66 return $this; 72 return $this->setCriteria(new Criteria); //JG: Sould we do that ? 73 // $this->criteria = new Criteria(); 74 // return $this; 67 75 } 68 76 69 77 public function getLatestQuery() … … 102 110 103 111 public function count($con = null, $reinitCriteria = true) 104 112 { 105 $ret = call_user_func(array($this->getPeerClass(), 'doCount'), $this-> criteria, $con);113 $ret = call_user_func(array($this->getPeerClass(), 'doCount'), $this->getCriteria(), $con); //JG 106 114 $this->updateLatestQuery(); 107 115 if($reinitCriteria) 108 116 { … … 118 126 { 119 127 $this->criteria->setLimit($limit); 120 128 } 121 $ret = call_user_func(array($this->getPeerClass(), 'doSelect'), $this-> criteria, $con);129 $ret = call_user_func(array($this->getPeerClass(), 'doSelect'), $this->getCriteria(), $con); //JG 122 130 $this->updateLatestQuery(); 123 131 if($reinitCriteria) 124 132 { … … 130 138 131 139 public function findOne($con = null, $reinitCriteria = true) 132 140 { 133 $ret = call_user_func(array($this->getPeerClass(), 'doSelectOne'), $this-> criteria, $con);141 $ret = call_user_func(array($this->getPeerClass(), 'doSelectOne'), $this->getCriteria(), $con); //JG 134 142 $this->updateLatestQuery(); 135 143 if($reinitCriteria) 136 144 { … … 157 165 158 166 public function delete($con = null, $reinitCriteria = true) 159 167 { 160 $deleteCriteria = clone $this->criteria;168 $deleteCriteria = $this->getCriteria(); //JG 161 169 if($deleteCriteria->equals(new Criteria())) 162 170 { 163 171 // delete will delete nothing when passed an empty criteria … … 213 221 array_shift($arguments); 214 222 } 215 223 list($value, $comparison) = $this->getValueAndComparisonFromArguments($arguments); 216 $this->criteria->add($column, $value, $comparison); 224 225 $this->addcondition('and', $column, $value, $comparison ); //JG 226 // $this->criteria->add($column, $value, $comparison); 217 227 218 228 return $this; 219 229 } … … 239 249 array_shift($arguments); 240 250 } 241 251 list($value, $comparison) = $this->getValueAndComparisonFromArguments($arguments); 242 $this->criteria->addAnd($column, $value, $comparison); 252 253 $this->addcondition('and', $column, $value, $comparison ); //JG 254 // $this->criteria->addAnd($column, $value, $comparison); 243 255 244 256 return $this; 245 257 } 246 258 259 260 /*!JG 261 * Conditions have to be stocked before being really used 262 * cf. sfPropelFinder::buildCriteria() 263 */ 264 protected function addcondition( $cond, $column, $value, $comparison ) 265 { 266 $criterion = $this->criteria->getNewCriterion($column,$value,$comparison); 267 $criterion->func = "add$cond"; 268 $this->criterions[] = $criterion; 269 } 270 271 272 /*!JG 273 * We want that the Finder fuild Interface works like : 274 * PHP : whereA()->_andB->_orC()->_orD()->_andE() 275 * SQL : where A=? AND (B=? OR (C=? OR (D=? AND E=?))) 276 * So we have to add condition starting by the last one! 277 */ 278 protected function buildCriteria() 279 { 280 $criteria = clone $this->criteria; 281 $criterions = $this->criterions; 282 283 while( $criterion = array_pop($criterions) ) 284 { 285 $c = count($criterions); 286 $func = $criterion->func; 287 if ( $c ) 288 { 289 $criterions[$c-1]->$func( $criterion ); 290 } 291 else 292 { 293 $criteria->$func($criterion); 294 } 295 } 296 return $criteria; 297 } 298 247 299 /** 248 300 * Finder Fluid Interface for Criteria::addOr() 249 301 * Infers $column, $value, $comparison from $columnName and some optional arguments … … 265 317 array_shift($arguments); 266 318 } 267 319 list($value, $comparison) = $this->getValueAndComparisonFromArguments($arguments); 268 $this->criteria->addOr($column, $value, $comparison); 320 $this->addcondition('or', $column, $value, $comparison ); 321 // $this->criteria->addOr($column, $value, $comparison); 269 322 270 323 return $this; 271 324 }