diff --git a/lib/Doctrine/Common/Collections/Criteria.php b/lib/Doctrine/Common/Collections/Criteria.php index 3f9d43a82..b1c85639d 100644 --- a/lib/Doctrine/Common/Collections/Criteria.php +++ b/lib/Doctrine/Common/Collections/Criteria.php @@ -75,6 +75,24 @@ public static function create() return new static(); } + /** + * Creates an instance with same behaviour as criteria parameters passed on ORM find methods. + * + * @param array $findCriteria + * + * @return Criteria + */ + public static function fromFindCriteria(array $findCriteria) + { + $criteria = static::create(); + + foreach ($findCriteria as $key => $value) { + $criteria->where(static::expr()->eq($key, $value)); + } + + return $criteria; + } + /** * Returns the expression builder. * diff --git a/tests/Doctrine/Tests/Common/Collections/CriteriaTest.php b/tests/Doctrine/Tests/Common/Collections/CriteriaTest.php index b3d3a06fd..c47cdfbad 100644 --- a/tests/Doctrine/Tests/Common/Collections/CriteriaTest.php +++ b/tests/Doctrine/Tests/Common/Collections/CriteriaTest.php @@ -15,6 +15,13 @@ public function testCreate() $this->assertInstanceOf('Doctrine\Common\Collections\Criteria', $criteria); } + public function testFromFindCriteria() + { + $criteria = Criteria::fromFindCriteria(array('name' => 'test', 'foo' => 42)); + + $this->assertInstanceOf('Doctrine\Common\Collections\Criteria', $criteria); + } + public function testConstructor() { $expr = new Comparison("field", "=", "value");