0

我想将关键字绑定到这样的 SQL 查询:

SELECT `field_1`, `field2` FROM `table` WHERE 
`field_1` LIKE '%keyword1%' 
OR `field_1` LIKE '%keyword2%'
OR `field_1` LIKE '%keyword3%'

请注意,关键字的数量不是预先确定的。它实际上是由一个数组确定的,该数组本身是通过在空间上爆炸用户的输入来确定的。

我正在使用 Laravel 7。因此,我正在寻找与 Laravel 7 和 PDO 一致的解决方案。问题是我不能'%?%'在我的 SQL 语句中使用,因为那样我将无法将我的数组中的值绑定到它。

我相信应该有一个解决方案,因为这似乎是编写简单搜索引擎的常见问题,但我自己找不到。

4

1 回答 1

3

关于您的示例查询,您需要添加%到值而不是语句,所以它是这样的:

WHERE foo LIKE ? OR foo LIKE ?

然后将值传递为"%$var1%""%$var2%"依此类推。

使用 Laravel 查询构建器

确保您将所有搜索词放在一个数组中。然后,您可以在 Laravel(您提到您正在使用)查询构建器中执行以下操作:

$searchWords = ['val1', 'val2', 'val3'];

// Now get the query builder and pass closure as the argument
$query = DB::table('some-table')
    ->where(function($query) use ($searchWords) {
        // Iterate through the words and add them one by one
        foreach ($searchWords as $word) {
            $query->orWhere('field', 'LIKE', "%{$word}%");
        }
    });

$result = $query->get();
于 2020-07-10T10:06:04.930 回答