Skip to content

Instantly share code, notes, and snippets.

@mrcmorales
Created October 29, 2013 14:47
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 mrcmorales/7216037 to your computer and use it in GitHub Desktop.
Save mrcmorales/7216037 to your computer and use it in GitHub Desktop.
array(29)
[0]: array(2)
[0]: object(CliCons\CoreBundle\Entity\User)
[distance]: string(17) "610.9962391109686"
[1]: array(2)
[0]: object(CliCons\CoreBundle\Entity\User)
[distance]: string(17) "637.3817621164012"
public function findByPosition($latitude=40.46366700000001, $longitude=-3.7492200000000366, $distance=1500)
{
$config = $this->getEntityManager()->getConfiguration();
$config->addCustomNumericFunction('COS', 'DoctrineExtensions\Query\Mysql\Cos');
$config->addCustomNumericFunction('ACOS', 'DoctrineExtensions\Query\Mysql\Acos');
$config->addCustomNumericFunction('RADIANS', 'DoctrineExtensions\Query\Mysql\Radians');
$config->addCustomNumericFunction('SIN', 'DoctrineExtensions\Query\Mysql\Sin');
$qb = $this->createQueryBuilder('d')
->add('from','CliConsCoreBundle:User u')
->select('u','a','j',strtr('
(
3959 *
ACOS(
COS( RADIANS(%lat%) ) *
COS( RADIANS(a.lat) ) *
COS( RADIANS(a.lon) - RADIANS(%lon%) ) +
SIN( RADIANS(%lat%) ) *
SIN( RADIANS(a.lat) )
)
) AS distance', array(
'%lat%' => $latitude,
'%lon%' => $longitude,
)
))
->join('u.address','a')
->leftjoin('u.jobCategories','j')
->having('distance < :distance')
->setParameter('distance', $distance)
->orderBy('distance', 'ASC')
;
return $qb;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment