Laravel 使用 LIKE 查询不返回任何结果

Posted

技术标签:

【中文标题】Laravel 使用 LIKE 查询不返回任何结果【英文标题】:Laravel query using LIKE does not return any result 【发布时间】:2018-05-28 01:26:00 【问题描述】:

大家好,我目前遇到了这个问题。我正在尝试在 DB 上搜索某些内容,但没有返回任何结果。以下是我的代码。

搜索字符串 1 = 波士顿凯尔特人队

搜索字符串 2 = 波士顿凯尔特人队不能

DB post_title = 波士顿凯尔特人队不能让公牛队的失利影响艰难的延伸

查询

$data = $searchPost->where('post_title', 'like', '%'.$search.'%')
            ->orderBy('post_date', 'desc')
            ->offset($offset)
            ->limit($limit)
            ->get();

搜索字符串 1 会返回结果,但搜索字符串 2 不会。

【问题讨论】:

【参考方案1】:

简单,因为你搜索不同的字符串。

搜索字符串 2 ".. Can't .." 使用直引号

'

DB post_title ".. Can't .." 使用 Curly Quotes

供参考:Straight and curly quotes

【讨论】:

【参考方案2】:

试试下面的代码:

1) 由于can't 中的',您的代码可能会中断字符串。

$data = $searchPost->where('post_title', 'like', "%$search%")
            ->orderBy('post_date', 'desc')
            ->offset($offset)
            ->limit($limit)
            ->get();

【讨论】:

可能会在“db”端破坏它,而不是 php 端..."%$search%" === '%'. $search .'%'【参考方案3】:

我的第一个猜测是撇号可能是罪魁祸首 - 在 SQL Server 中,连接运算符是“+”,因此您可能还想确保它是正确的。也许尝试删除撇号字符:

替换($search, '''', '')

Microsoft SQL 中的四个单引号是单引号的转义序列。

【讨论】:

【参考方案4】:

之前遇到过同样的问题

试试这个

$data = $searchPost->where('post_title', 'like', '"%'.$search.'%"')
        ->orderBy('post_date', 'desc')
        ->offset($offset)
        ->limit($limit)
        ->get();

如您所见,前面有一个 " 开头的 % 和结尾的 % 之后的另一个。

【讨论】:

【参考方案5】:

如果您仔细查看您的搜索和数据库中的 Can't,' 看起来不一样

不能 对比 不能

当'不一样的时候,确定是搜索不到的。很简单。

【讨论】:

【参考方案6】:

必须使用 str_replace 方法来更改撇号字符

$search = str_replace('-', ' ', urldecode($request->input('search')));
$search = str_replace("'", "’", $search);

【讨论】:

以上是关于Laravel 使用 LIKE 查询不返回任何结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 'Like' 的 Sql Query 正在给出结果,但使用 '=' 不会在 Oracle 中返回任何结果

如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询

在 Sqlite 中,LIKE 函数不起作用或不返回任何内容

PLSQL连接Oracle使用like模糊查询中文时返回结果为空

使用带有 LIKE 的 mysql 本机查询的 spring boot 搜索返回空

查询的活动结果不包含任何字段 laravel