我正在尝试选择在名字首字母的给定范围内列出的用户。
例如,如果此人的姓名以字母C
开头,则用户将选择范围,例如A-E
。因此,他会点击范围A-E
,该范围将显示名称以A
,B
,C
,D
开头的所有用户和E
。
为了做到这一点,我试图查询laravel雄辩,但我找不到所需的解决方案。在一点研究中,我发现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();
答案 0 :(得分:1)
根据你找到的例子(在问题描述中提到),REGEXP的值应该在[{1}}这样的范围[]中,所以将你的第二个地方更改为'^[A-E].*$'
并同时考虑大写和小写字母where('full_name', "REGEXP '^[".$request->range."].*$'")
与a-e
<强>更新强>
我们在@ user3514160创建时,A-E
条件应如下所示
where