Skip to content

Instantly share code, notes, and snippets.

@rudisimo
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rudisimo/8964768 to your computer and use it in GitHub Desktop.
Save rudisimo/8964768 to your computer and use it in GitHub Desktop.
<?php
public function search(array $search = NULL, $sort = null, $order = "ASC", $limit = 10) {
$params = array();
$values = array();
// create query builder
$ns = 's';
$qb = $this->createQueryBuilder($ns);
// build parameter bag
if ($search) {
foreach ($search as $column => $value) {
if (is_array($value)) {
$params[] = sprintf('%s.%s IN (:%s)', $ns, $column, $column);
} else {
$params[] = sprintf('%s.%s = :%s', $ns, $column, $column);
}
$values[$column] = $value;
}
}
// build where statement (only when necessary)
if (sizeof($params) > 0) {
$qb->where(join(' AND ', $params)); // you can change this to use expr() if you want
foreach ($values as $param => $value) {
$qb->setParameter($param, $value);
}
}
// add sort parameters
if (!is_null($sort)) {
$sortBy = sprintf('%s.%s', $ns, $sort);
$qb->orderBy($sortBy, $order);
}
// add query limit
$qb->setMaxResults($limit);
// build query
$query = $qb->getQuery();
return $query->getResult();
}
@rudisimo
Copy link
Author

Then you'd use it as

$repository->search(array('university' => 10));

or

$repository->search(array('name' => 'My University Name'));

or

$repository->search();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment