【问题标题】:Raw relevance query in Laravel. How to handle it?Laravel 中的原始相关性查询。如何处理?
【发布时间】:2015-02-25 11:23:56
【问题描述】:

我目前正在将一个大项目转移到 Laravel 框架 http://hobbyathletes.com/events/south-america/all-event-types/all/。我需要迁移我的内部搜索引擎,该搜索引擎使用以下查询(如果搜索一个词,此处附加预选选项 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

如何将此查询传输到 Eloquent 查询构建器?我已经尝试过DB:raw($query),这似乎不起作用......尝试了急需的->paginate(25)->get(),但都不起作用。这里的任何人都可以让我朝着正确的方向前进吗?

【问题讨论】:

  • 你得到什么类型的错误?
  • 我没有收到任何错误,但这篇文章确实有帮助;我不得不使用 DB::select(DB::raw($myQuery));然后我必须构建自己的分页器,但这很容易,但不是 Paginate::make thingy,这对我没有用。我在查询中添加了一个 LIMIT: $limit = " LIMIT ".(($page-1)*$perpage).",".$perpage;
  • 是的。我猜查询运行速度不是很快。

标签: php mysql laravel-4 eloquent


【解决方案1】:

试试 DB::select()

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

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 2021-06-24
    • 2019-07-13
    • 2015-04-09
    • 2021-09-18
    • 2012-10-29
    • 1970-01-01
    • 2019-11-05
    • 2013-06-28
    相关资源
    最近更新 更多