I am trying to create a weighted search using doctrine. This is how i do it in straight sql. Im wondering how i would convert it to us the doctrine2 methods. I am trying to
Yes, it can be done using DQL
. Doctrine does not support IF
statement. But same functionality can be achieved by CASE
statement. Sample DQL
is given bellow,
$dql = "SELECT t,
(CASE
WHEN (t.name LIKE :searchterm) THEN 10
ELSE 0
END) +
(CASE
WHEN (t.address LIKE :searchterm) THEN 5
ELSE 0
END) +
(CASE
WHEN (t.city LIKE :searchterm) THEN 1
ELSE 0
END)
AS weight
FROM YourBundleName:TableName t
WHERE
t.name LIKE :searchterm OR
t.address LIKE :searchterm OR
t.city LIKE :searchterm
ORDER BY weight DESC
";
$query = $entityManager->createQuery($dql)
->setFirstResult(0)
->setMaxResults(20)
->setParameter('searchterm' , $searchterm)
;