本文介绍了Laravel中的原始相关性查询。如何处理?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将一个大型项目转移给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

如何将此查询传送给优秀查询构建器?我已经尝试了 DB:raw($ query)这似乎不起作用...试用了非常需要的 - > paginate(25) - > get(),都不工作。任何人都可以把我放在正确的方向吗?

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?

推荐答案

尝试使用DB :: select()

Try with DB::select()

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

这篇关于Laravel中的原始相关性查询。如何处理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 02:58