gpt4 book ai didi

php - 在 Laravel 中搜索部分匹配项

转载 作者:行者123 更新时间:2023-11-29 12:22:30 25 4
gpt4 key购买 nike

我正在 Laravel 中编写一个搜索函数,但我只能搜索完整的查询,这不是一个理想的解决方案。我的意思是,如果我传递像“lorem%20ipsum”这样的查询,我只会得到“lorem ipsum”的结果,而不会得到“lorem”或“ipsum”的部分匹配。谁能给我一些关于如何最好地完成这项任务的想法?

这是我目前完整的搜索代码:

路由.php

Route::get('{lang}/search/{query}', 'HomeController@searchPages');

HomeController.php

public function searchPages($lang, $query) {

$searchResults = Search::acme($query, $lang);

return View::make('search.search')
->with('searchResults', $searchResults);
}

模型/Page.php

class Page extends Eloquent {

public function scopeSearch($query, $search)
{
return $query->where(function($query) use ($search)
{
$query->where('title','LIKE', "%$search%")
->orWhere('body', 'LIKE', "%$search%");
});
}
}

Acme/Facades/Search.php

namespace Acme\Facades;

use Illuminate\Support\Facades\Facade;

class Search extends Facade {

protected static function getFacadeAccessor()
{
return 'search';
}
}

Acme/Search/SearchServiceProvider.php

namespace Acme\Search;

use Illuminate\Support\ServiceProvider;

class SearchServiceProvider extends ServiceProvider {

public function register()
{
$this->app->bind('search', 'Acme\Search\Search');
}
}

Acme/Search/Search.php

namespace Acme\Search;

use Illuminate\Support\Collection;
use Page;

class Search {

public function pages($search)
{
return Page::search($search)->get();
}

public function acme($query, $lang)
{
return new Collection(Page::join('langs', 'langs.id', '=', 'pages.lang_parent_id')
->where('title', 'LIKE', '%'.$query.'%')
->orWhere('body', 'LIKE', '%'.$query.'%')
->where('code', '=', $lang)
->get()
->toArray());
}
}

最佳答案

您需要循环遍历您的搜索文本并让您变得 Eloquent ,例如:

$db_query = Page::join('langs', 'langs.id', '=', 'pages.lang_parent_id');
$my_search_text_arr = explode(' ',$query);

$first = true
for_each($my_search_text_arr as $my_search_text){
if($first){
$db_query = $db_query->where('title', 'LIKE', '%'.$my_search_text.'%');
$first = false;
}else{
$db_query = $db_query->orWhere('title', 'LIKE', '%'.$my_search_text.'%');
}
}

return new Collection($db_query
->where('code', '=', $lang)
->get()
->toArray());

关于php - 在 Laravel 中搜索部分匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28816221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com