首页 > 解决方案 > 检查数组的所有元素是否都在 Laravel 的 where 子句中的字符串中

问题描述

我有一个模型,它的字段type由几个单词组成。字符串如下所示:modern premium hot.

如果我想用这样的数组过滤它,如何获得相关结果:

$filter = [0 => 'modern', 1 => 'hot'];

$search = implode(' ', $filter);

$results = Model::where('type', $search)->get();

上面的例子不会返回任何东西,因为它会尝试匹配modern premium hotmodern hot它不一样,但是如何获得所有包含单词的相关结果,modern同时hottype字段中?

换句话说,如何获得在type字段中包含数组的所有元素的所有结果,这是一个字符串?

标签: laravel

解决方案


也许您需要像 Elastic Search 或 Algolia 这样的全文服务,或者甚至在您的数据库引擎上查看全文搜索(假设是 MySQL,请查看此链接)。

但如果你真的需要继续前进,你可以尝试这样的事情:

$query = Model::query();

foreach ($filter as $term) {
    $query->orWhere('type', 'LIKE', "%{$term}%");
}

$results = $query->get();

推荐阅读