2017-04-08 94 views
0

我遇到以下問題: 我想創建一個即時搜索,在用戶開始輸入時立即通過AJAX獲得結果。我不想爲每個'keyup'在六個表內執行額外的數據庫查詢,而是想要加載所有數據庫記錄並在我看來提供它們。 這樣我只需要搜索我的收藏品是否包含搜索詞並將其作爲結果返回。 我知道我可以用where()-方法縮小範圍,例如,Laravel:按搜索項篩選蒐集結果

$words = $words->where('lemma', 'mysearchterm'); return $words;

的問題是,我不想要檢索精確匹配,但在標準的SQL查詢(SELECT * FROM nouns WHERE lemma LIKE %$mysearchterm%)使用通配符等。

我該怎麼做? 我一直在嘗試兩個小時。 這是否有意義?或者,一旦用戶開始輸入,每次查詢數據庫都沒有性能優勢?有一個更好的方法嗎?

在此先感謝!

+1

你問在查詢中如何使用'like'? ('lemma','like','%'。$ mysearchterm。'%');'?你也可以看看[Laravel Scout](https://laravel.com/docs/5.4/scout)這是一個全文搜索引擎。不需要模式匹配。它確實使用[Algolia](https://www.algolia.com/),這是免費的,但非常合理。 – Ohgodwhy

+1

我是wirth @Ohgodwhy在這裏。你可能會想看看Scout。如果您不想使用Algolia並堅持使用本地數據庫,您可以輕鬆將其與[偵察兵TNT搜索驅動程序](https://github.com/teamtnt/laravel-scout-tntsearch-driver)配對。 –

回答

0

感謝您的回答。我一定會看看Scout。我解決了這個代碼我的問題:

$result = $words->filter(function ($value, $key) { 

    if (strpos($value->lemma, $mysearchterm) !== false) { 
     return $value; 
    } 
});