/**
* Finds objects by a set of criteria.
*
* Optionally sorting and limiting details can be passed. An implementation may throw
* an UnexpectedValueException if certain values of the sorting or limiting details are
* not supported.
*
* @param array $criteria
* @param array|null $orderBy
* @param int|null $limit
* @param int|null $offset
* @return mixed The objects.
*/
public function findBy(array $criteria, array $orderBy = array(), $limit = null, $offset = null, $fetchPlan = '*:0')
{
$results = array();
foreach ($this->getOrientClasses() as $mappedClass) {
$query = new Query(array($mappedClass));
foreach ($criteria as $key => $value) {
$query->andWhere("{$key} = ?", $value);
}
foreach ($orderBy as $key => $order) {
$query->orderBy("{$key} {$order}");
}
if ($limit) {
$query->limit($limit);
}
$collection = $this->getManager()->execute($query, $fetchPlan);
if (!$collection instanceof ArrayCollection) {
throw new Exception("Problems executing the query \"{$query->getRaw()}\". " . "The server returned {$collection} instead of ArrayCollection.");
}
$results = array_merge($results, $collection->toArray());
}
return new ArrayCollection($results);
}