Laravel就像在字符之前存在空格时不返回结果



我不知道如何解释我的问题;在laravel上,我需要返回成员的代码以(J or j)开头,但当我使用('members.code', 'like', 'j%')时;

代码的var_dump中有一些成员类似于CCD_ 3。我的代码只返回那些像"jH6"; "J9u"。。。但如果他们有空间,或者在我的结果中有不止一个sapce,就不会。

我想返回所有成员,他们的代码以j开头,即使代码中有空格或不止一个空格。

我的查询是

$query = member::where('members.inscription', '>=', $date_start->startOfDay())
                ->where('members.inscription', '<=', $date_end->endOfDay())
                ->where('members.id_member', '>', 1099)
                ->where('members.code', 'like', 'J%')
                ->orderBy('members.id_member', 'DESC');
$members = $query->get();
var_dump($members); die;

在进行LIKE比较之前,可以尝试修剪成员代码左侧的空白:

$query = member::where('members.inscription', '>=', $date_start->startOfDay())
    ->where('members.inscription', '<=', $date_end->endOfDay())
    ->where('members.id_member', '>', 1099)
    ->whereRaw("LTRIM(members.code) LIKE 'J%' OR LTRIM(members.code) LIKE 'j%'")
    ->orderBy('members.id_member', 'DESC');

但请注意,以这种方式使用LTRIM(或某些替代方法,如REGEXP(将使WHERE子句不可搜索,这意味着members.code上的任何索引都不能再使用。如果这是一个使用性能方面的问题,那么考虑清理数据以删除这个前导空格。

相关内容

  • 没有找到相关文章

最新更新