Laravel-根据单词数组的出现对查询进行排序

时间:2018-07-06 00:04:21

标签: php database laravel

使用以下代码,我可以获取所需的数据,但我也想进行排序。

让我们说它只发现了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:

1 个答案:

答案 0 :(得分:0)

因此,您希望根据关键字在每个条目中的命中数对条目进行排序。我为Eloquent编写了一个简单的搜索库,可以帮助解决这个问题。它根据每个关键字在给定字段中出现的次数(您可以自定义)对条目进行排名,并将其作为Laravel集合返回。 在此处查看:glmdev/search on Github

它将为您的模型提供一个search()方法,如下所示:

$products = $productData->search("metal chairs");

如果您真的真的需要自己重新实现它,请参见我如何通过关键字is available here.对模型进行排序的代码