dongyi0210 2014-12-29 09:08
浏览 27

Laravel中的原始相关性查询。 怎么处理?

I'm currently transfering a big project to Laravel framework http://hobbyathletes.com/events/south-america/all-event-types/all/. I need to migrate my internal searchengine, which uses the following query (if searched for one word, here additional pre-selected option South America ):

SELECT *, (
 (CASE WHEN name LIKE '%searchthis%' THEN 1000 ELSE 0 END) + 
 (CASE WHEN name LIKE 'searchthis %' THEN 10 ELSE 0 END) + 
 (CASE WHEN name LIKE 'searchthis%' THEN 1 ELSE 0 END) + 
 (CASE WHEN name LIKE '% searchthis %' THEN 5 ELSE 0 END) + 
 (CASE WHEN city LIKE '%searchthis%' THEN 500 ELSE 0 END) + 
 (CASE WHEN city LIKE 'searchthis%' THEN 10 ELSE 0 END) + 
 (CASE WHEN city LIKE 'searchthis %' THEN 1 ELSE 0 END) + 
 (CASE WHEN city LIKE '% searchthis %' THEN 5 ELSE 0 END) + 
 (CASE WHEN country LIKE '%searchthis%' THEN 500 ELSE 0 END) + 
 (CASE WHEN country LIKE 'searchthis%' THEN 10 ELSE 0 END) + 
 (CASE WHEN country LIKE 'searchthis %' THEN 1 ELSE 0 END) + 
 (CASE WHEN country LIKE '% searchthis %' THEN 5 ELSE 0 END) + 
 (CASE WHEN homepage LIKE '%searchthis%' THEN 600 ELSE 0 END) + 
 (CASE WHEN headline LIKE '%searchthis%' THEN 100 ELSE 0 END) + 
 (CASE WHEN headline LIKE 'searchthis%' THEN 10 ELSE 0 END) + 
 (CASE WHEN headline LIKE 'searchthis %' THEN 1 ELSE 0 END) + 
 (CASE WHEN headline LIKE '% searchthis %' THEN 5 ELSE 0 END) + 
 (CASE WHEN description LIKE '%searchthis%' THEN 100 ELSE 0 END) + 
 (CASE WHEN description LIKE 'searchthis%' THEN 10 ELSE 0 END) + 
 (CASE WHEN description LIKE 'searchthis %' THEN 1 ELSE 0 END) + 
 (CASE WHEN description LIKE '% searchthis %' THEN 5 ELSE 0 END) + 
 (CASE WHEN distances LIKE '%searchthis%' THEN 100 ELSE 0 END) + 
 (CASE WHEN distances LIKE 'searchthis%' THEN 10 ELSE 0 END) + 
 (CASE WHEN distances LIKE 'searchthis %' THEN 1 ELSE 0 END) + 
 (CASE WHEN distances LIKE '% searchthis %' THEN 5 ELSE 0 END) + 
 (CASE WHEN date LIKE '%2014%' THEN 300 ELSE 0 END) + 
 (CASE WHEN name LIKE '%2014%' THEN 200 ELSE 0 END) + 
 (CASE WHEN date LIKE '%2013%' THEN 200 ELSE 0 END) + 
 (CASE WHEN name LIKE '%2013%' THEN 100 ELSE 0 END) 
) 
 AS relevance 
 FROM events 
 WHERE 
 (
 country = 'Argentina' or 
 country = 'Bolivia' or 
 country = 'Brazil' or 
 country = 'Chile' or 
 country = 'Colombia' or 
 country = 'Ecuador' or 
 country = 'Guyana' or 
 country = 'Paraguay' or 
 country = 'Peru' or 
 country = 'Suriname' or 
 country = 'Uganda' or 
 country = 'Uruguay' or 
 country = 'Venezuela'
 ) 
 AND
 ( 
 name LIKE '%searchthis%' OR 
 country LIKE '%searchthis%' OR 
 city LIKE '%searchthis%' OR 
 homepage LIKE '%searchthis%' OR 
 headline LIKE '%searchthis%' OR 
 description LIKE '%searchthis%' OR 
 distances LIKE '%searchthis%'
) 
ORDER BY relevance DESC

How can I transfer this query to Eloquent Query builder? I tried already DB:raw($query) which seems not to work... Tried is with the much needed ->paginate(25) and with ->get(), all not working. Anyone here can put me in the right direction?

  • 写回答

1条回答 默认 最新

  • dro62273 2015-04-15 20:48
    关注

    Try with DB::select()

    DB::select(DB::raw("
        SELECT * FROM bla bla bla  
    "));
    
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度