как можно сделать это в Laravel с Eloquent и DB - PullRequest
0 голосов
/ 19 мая 2018

как можно сделать это в laravel с eloquent и db

SELECT thread.threadid, MATCH(thread.title) AGAINST ('title_seatch_word') AS score
FROM  thread AS thread
WHERE MATCH(thread.title) AGAINST ('title_seatch_word')
    AND thread.open <> 10
    " . iif($threadid, " AND thread.threadid <> $threadid") . "
LIMIT 5

я поднос это

Thread::whereRaw('MATCH (`title`) AGAINST (?)', ['title_search_word'])
  ->where('open', '<>', 10)
  ->when(isset($threadid), function ($query) {return $query->where('threadid', '<>', $threadid);})
  ->take(5)
  ->get();

поставить я не могу написать это

SELECT thread.threadid, MATCH(thread.title) AGAINST ('title_seatch_word') AS score

так что яхочу завершить запрос

1 Ответ

0 голосов
/ 19 мая 2018

Используйте это:

Thread::select('threadid')
    ->selectRaw('MATCH (`title`) AGAINST (?) AS score', ['title_search_word'])
    ->where('open', '<>', 10)
    ->when(isset($threadid), function ($query) {
        return $query->where('threadid', '<>', $threadid);
    })
    ->havingRaw('`score`') // OR: ->having('score', '>', 0)
    ->take(5)
    ->get();

Таким образом, score должен быть рассчитан только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...