php - 使用字母范围查询 Eloquent 模型

标签 php mysql eloquent laravel-5.1

我正在尝试选择在给定的名字首字母范围内列出的用户。

例如,如果人名以字母 C 开头,则用户将选择范围,比方说,A-E。为此,他将单击范围 A-E,该范围将显示名称以 AB 开头的所有用户>CDE

为了做到这一点,我试图查询 laravel eloquent,但我找不到所需的解决方案。通过一些研究,我发现了 this link提供了解决方案,但没有提供我正在寻找的东西。

我做的查询是:

public function getAllUsers(Request $request)
{
    $users = User::where('account_type', 'beneficiary')->latest()->get();

    if($request->range !== null) {
        $users = User::where('account_type', 'beneficiary')->where('full_name', "REGEXP '^".$request->range.".*$'")->latest()->get();

        dd($users); // returned an empty Collection object
    }

    return view('pages.beneficiaries', compact('users'));
}

底线:获取名称在用户将选择的给定范围内开始的用户。

非常感谢任何帮助。谢谢。

P.S:我知道这可能很容易解决,但我失败了。

更新 1:解决方案

在@Armen 的帮助下,我解决了这个问题。我传递给 Eloquent 模型的查询如下:

// Notice the curly braces and also the removal of single quotes
$users = User::where('account_type', 'beneficiary')
         ->where('full_name', 'REGEXP', "^[{$request->range}].*$") 
         ->get();

最佳答案

根据您找到的示例(在问题描述中提到)REGEXP 的值应该在这样的范围 [] 中 '^[A-E].*$' 所以将您的第二个位置更改为 where('full_name', "REGEXP '^[".$request->range."].*$'") 并考虑大小写字母 a-e 不是与 A-E

相同

更新

当我们与@user3514160 建立时,where 条件应该是这样的

->where('full_name', 'REGEXP', "^[{$request->range}].*$") 

关于php - 使用字母范围查询 Eloquent 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34200632/

相关文章:

php - 在 App Engine for PHP 中优化 MySQL 连接的推荐方法是什么?

PHP/MYSQL 检查数据库的枚举值?

php - 在 Asterisk 构建的 ASCII 艺术金字塔中错放的行在 PHP 中使用多个 for 循环制作

带有条件 SELECT 参数的 MySQL 查询 - where 子句中的未知列

mysql - 选择所有项目并按条件在相关表中计数

mysql - 按类别中项目的下载次数对类别进行排序

php - 使用 Laravel 检查该值是否已存在于数据库中

PHP 文件返回正确的回显,但在数据库中写入错误的字符串

mysql - Laravel, Eloquent 多对多,数据透视表中的多对多

mysql join 选择两个表之间的最小(日期)和最大(日期)