0
我在Laravel中编码搜索功能,但我只能搜索完整的查询,这不是理想的解决方案。通过这个我的意思是,如果我通过一个像“lorem%20ipsum”这样的查询,我只会得到“lorem ipsum”的结果,而我不会像“lorem”或“ipsum”那样得到部分匹配。任何人都可以给我一些关于如何最好地完成这项任务的想法?在Laravel中搜索部分匹配
这是目前我的完整搜索代码:
routes.php文件
Route::get('{lang}/search/{query}', '[email protected]');
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 /幕墙/ search.php中
namespace Acme\Facades;
use Illuminate\Support\Facades\Facade;
class Search extends Facade {
protected static function getFacadeAccessor()
{
return 'search';
}
}
的Acme /搜索/ 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.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());
}
}
这将工作,但我不知道是否还有更优化的一个。但这会做伎俩 – Ceeee 2015-03-03 06:45:24
谢谢Cee。我不确定如何将查询“爆炸”到数组中。请注意,我必须在foreach循环内执行语言查询。您发布时它并未在收藏集中工作,我不知道为什么。 – 2015-03-03 14:58:34
对于爆炸功能:这可能有助于http://www.w3schools.com/php/func_string_explode.asp – Ceeee 2015-03-04 00:02:37