Laravel 7 / SQL不区分大小写的where子句

Posted

技术标签:

【中文标题】Laravel 7 / SQL不区分大小写的where子句【英文标题】:Laravel 7 / SQL case insensitive where clause 【发布时间】:2020-12-06 14:09:23 【问题描述】:

从数据库获取数据时遇到问题。 问题是,搜索查询使用区分大小写的参数,这是我不想要的。

需要一个解决方案,查找所有数据库字段,不区分大小写,并且与字符串完全相同,前后均无文本。

例子:

首先我得到数据:$affiliateOpens = AffiliateOpen::where('user_id', $user->id)->get();

然后,我将要搜索的字符串转换为小写,就像这样(因为有许多不同字符大小写的记录:

$sources = [];
    foreach ($affiliateOpensCollection  as $affiliateOpen)
        $sources[] = strtolower($affiliateOpen->source);

 foreach ($uniqueSources as $source) 
        $sourceData[$source]['installs'] = count($affiliatesOpenCollection->where('source', $source)->where('date_installed', '<>', null));
 

如何在不区分大小写的情况下进行搜索并从数据库中获取数据?

【问题讨论】:

【参考方案1】:

请尝试:

   $sourceData[$source]['installs'] = count($affiliatesOpenCollection->filter(function ($item) use ($source) 
            return (strtolower($item['source']) == strtolower($source) && $item['date_installed'] != null);
        ));

【讨论】:

谢谢,但我收到以下错误:Method Illuminate\Database\Eloquent\Collection::whereRaw 不存在。

以上是关于Laravel 7 / SQL不区分大小写的where子句的主要内容,如果未能解决你的问题,请参考以下文章

使用用户名的 Laravel 身份验证不区分大小写

Laravel 不区分大小写的路由

Laravel“where”子句默认不区分大小写?

如何使 Laravel 中的路线不区分大小写?

使 Laravel 的 notIn 验证规则不区分大小写

Laravel Eloquent 不区分大小写的查询