我不知道如何解释我的问题;在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
上的任何索引都不能再使用。如果这是一个使用性能方面的问题,那么考虑清理数据以删除这个前导空格。