How to convert a complex MySQL Query to Doctrine2

后端 未结 1 1972
慢半拍i
慢半拍i 2020-12-16 19:22

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

相关标签:
1条回答
  • 2020-12-16 19:44

    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)
      ;
    
    0 讨论(0)
提交回复
热议问题