3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace Lunnar\Bundle\CustomRepositories; use Doctrine\ORM\EntityRepository; class ProfileRepository extends EntityRepository{ public function RandomProfilesWithLimit($Limit){ $numbers = $this->getEntityManager() ->createQuery( 'SELECT p.id FROM LunnarBundle:Profile p' )->getResult(); shuffle($numbers); $numbers = array_slice($numbers, 0, $Limit); $query = 'SELECT p FROM LunnarBundle:Profile p WHERE p.id in ('; foreach($numbers as $number){ foreach($number as $key){ $query = $query.$key.','; } } $query = substr($query, 0, -1); $query = $query.')'; return $this->getEntityManager() ->createQuery( $query )->getResult(); } public function getProfilesBySearch($searchString, $isMapSearch = false){ $searchString = strtolower($searchString); $em = $this->getEntityManager(); $cit = $em->getRepository('LunnarBundle:City')->findAll(); $cat = $em->getRepository('LunnarBundle:Profilecategory')->findAll(); $cities = array(); $categories = array(); foreach($cit as $city){ array_push($cities, strtolower($city->getName())); } foreach($cat as $category){ array_push($categories, strtolower($category->getName())); } $parameters = array( 'var' => '%'.$searchString.'%', ); $searchQuery = "SELECT p FROM LunnarBundle:Profile p LEFT JOIN p.divisions d LEFT JOIN p.brand b LEFT JOIN p.profilecategory pc LEFT JOIN d.city c WHERE ( p.name LIKE :var OR (d.name LIKE :var AND d.maindivision = true )OR b.name LIKE :var OR pc.name LIKE :var OR c.name LIKE :var ) ORDER BY p.name ASC"; $query = $this->getEntityManager() ->createQuery( $searchQuery )->setParameters($parameters); return $query->getResult(); } public function getProfilesExperimental($searchString, $isMapSearch = false){ $searchString = strtolower($searchString); $em = $this->getEntityManager(); $cit = $em->getRepository('LunnarBundle:City')->findAll(); $cat = $em->getRepository('LunnarBundle:Profilecategory')->findAll(); $bra = $em->getRepository('LunnarBundle:Brand')->findAll(); $cities = array(); $profilecategories = array(); $brands = array(); foreach($cit as $city){ array_push($cities, strtolower($city->getName())); } foreach($cat as $category){ array_push($profilecategories, strtolower($category->getName())); } foreach($bra as $brand){ array_push($brands, strtolower($brand->getName())); } $parameters = array(); //'var' => '%'.$searchString.'%', $searchQuerySelectJoin = "SELECT p FROM LunnarBundle:Profile p LEFT JOIN p.divisions d "; $searchQueryWhere = ""; ////////////////////////// $searchStringArray = explode(" ", $searchString); // Remove í, á and við $removeWords = array('í','á','við'); //Find city, category, brand and save for later, and remove them from $searchStringArray $searchStringArray = array_diff($searchStringArray, $removeWords); $city = array_intersect($searchStringArray, $cities); $searchStringArray = array_diff($searchStringArray, $city); $category = array_intersect($searchStringArray, $profilecategories); $searchStringArray = array_diff($searchStringArray, $category); $brand = array_intersect($searchStringArray, $brands); $searchStringArray = array_diff($searchStringArray, $brand); //// PRINTS print_r($searchStringArray); echo '<br/>'; //print_r($city); //print_r($profilecategory); //print_r($brand); $first = true; $searchTerms = " "; if (sizeof($searchStringArray)>0){ $searchTerms = current($searchStringArray); $parameters['var'] = "%".$searchTerms."%"; $searchQueryWhere = "WHERE ( p.name LIKE :var ".$searchQueryWhere; $first = false; } elseif (sizeof($searchStringArray)==0){ $searchQueryWhere = " WHERE ( ".$searchQueryWhere; } if ($category){ $parameters['category'] = $category; $searchQuerySelectJoin .= " LEFT JOIN p.profilecategory pc "; if (!$first){ $searchQueryWhere .= " AND pc.name = :category "; }else { $first = false; $searchQueryWhere .= " pc.name = :category "; } } if ($brand){ $parameters['brand'] = $brand; $searchQuerySelectJoin .= " LEFT JOIN p.brand b "; if (!$first){ $searchQueryWhere .= " AND b.name = :brand "; }else { $first = false; $searchQueryWhere .= " b.name = :brand "; } } if ($city){ $parameters['city'] = $city; $searchQuerySelectJoin .= " LEFT JOIN d.city c "; if (!$first){ $searchQueryWhere .= " AND c.name = :city "; }else { $first = false; $searchQueryWhere .= " c.name = :city "; } } ////////////////////////// if($isMapSearch == true){ $searchQuery .= "AND d.latitude IS NOT NULL "; } $searchQuery = $searchQuerySelectJoin.$searchQueryWhere." ) ORDER BY p.name ASC"; echo $searchQuery; $query = $this->getEntityManager() ->createQuery( $searchQuery )->setParameters($parameters); return $query->getResult(); } }

preferences:
39.43 ms | 402 KiB | 5 Q