Php 用字母范围查询雄辩模型

Php 用字母范围查询雄辩模型,php,mysql,eloquent,laravel-5.1,Php,Mysql,Eloquent,Laravel 5.1,我试图选择在其名字首字母给定范围内列出的用户 例如,如果此人的姓名以字母C开头,则用户将选择范围,例如,A-E。因此,他将单击范围A-E,该范围将显示名称以A、B、C、D和E开头的所有用户 为了做到这一点,我试图质疑拉威尔雄辩,但我无法找到理想的解决方案。通过一些研究,我发现这提供了解决方案,但它并没有提供我想要的 我提出的问题是: public function getAllUsers(Request $request) { $users = User::where('account_

我试图选择在其名字首字母给定范围内列出的用户

例如,如果此人的姓名以字母
C
开头,则用户将选择范围,例如,
A-E
。因此,他将单击范围
A-E
,该范围将显示名称以
A
B
C
D
E
开头的所有用户

为了做到这一点,我试图质疑拉威尔雄辩,但我无法找到理想的解决方案。通过一些研究,我发现这提供了解决方案,但它并没有提供我想要的

我提出的问题是:

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的帮助下,我解决了这个问题。我传递给雄辩模型的查询如下:

// 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更改为
where('full_name',“REGEXP'^[“$request->range.].*$'”
,同时考虑到大写和小写字母
A-E
A-E

更新

正如我们在@user3514160中发现的那样,
where
条件应该是这样的

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

$request->range
变量中有什么?你把它扔了吗?它是
a-e
,举个例子,没用。。返回一个空的
集合
objectTry调用DB::table('table')…->toSql()要查看您执行的真正sql查询,这里有
DB::table('users')
“从account_type=?和full_name=?”的用户中选择*”
似乎我遇到了您的问题,将您的where更改为
where('full_name','REGEXP',“^[“$request->range.].*$”
,另外,请确保如果此查询
select*来自帐户类型为“受益人”且全名为REGEXP'^[A-E].*$'
的用户,您在phpmyadmin或php端得到了什么?金额正确吗?