使用以下代码,我可以获取所需的数据,但我也想进行排序。
让我们说它只发现了3行, 首先,它找到一个单词的匹配项 在第二个它发现两个单词的匹配 第三,它找到一个单词的匹配项。
$keyword = "metal chairs";
$keywordArr = explode(" ", $keyword);
$productData = $productData->where(function ($query) use ($keyword, $MykeywordArr) {
$query->orWhere('products.name', 'like', $keyword . '%');
$query->orWhere('products.info', 'like', $keyword . '%');
foreach ($MykeywordArr as $keywordKey => $keywordValue) {
$query->orWhere('products.name', 'like', '%' . $keywordValue . '%');
$query->orWhere('products.info', 'like', '%' . $keywordValue . '%');
}
});
// sorting for $productData goes here:
答案 0 :(得分:0)
因此,您希望根据关键字在每个条目中的命中数对条目进行排序。我为Eloquent编写了一个简单的搜索库,可以帮助解决这个问题。它根据每个关键字在给定字段中出现的次数(您可以自定义)对条目进行排名,并将其作为Laravel集合返回。 在此处查看:glmdev/search on Github。
它将为您的模型提供一个search()
方法,如下所示:
$products = $productData->search("metal chairs");
如果您真的真的需要自己重新实现它,请参见我如何通过关键字is available here.对模型进行排序的代码