基本上,我需要做的是在数据库中进行相反的搜索。
我有一个模型,我们将其称为搜索
,其中包含用户在我的网站上进行的所有搜索。给定特定文本,我需要知道有多少搜索与该文本匹配。
示例 假设搜索 iphone
、apple
、samsung
和文本 apple iphone X 16gb
,结果将为 2,因为 iphone
和 apple
匹配,但 samsung
不匹配。
我尝试的是:
$searches = Search::select('id')
->where(DB::raw("'". $text ."' LIKE CONCAT('%', searched_text, '%')"))
->count();
但无论如何它总是返回 0。有一个简单的方法可以实现这一点吗?
最佳答案
因此,数据库中有 iphone
、apple
和 samsung
,现在您想按 apple iphone X 16gb
字符串。
如果要使用精确匹配,请使用whereIn()
:
Search::whereIn('searched_text', explode(' ', $search))->count();
如果您想使用 like
,例如,如果您还想计算 iphone
而不仅仅是 iphone
:
$words = explode(' ', $search);
$query = Search::query();
foreach ($words as $word) {
$query = $query->orWhere('searched_text', 'like', '%' . $word . '$');
}
$counted = $query->count();
关于php - 包含在常量中的 Laravel 查询模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48091458/