我正在尝试选择在给定的名字首字母范围内列出的用户。
例如,如果人名以字母 C
开头,则用户将选择范围,比方说,A-E
。为此,他将单击范围 A-E
,该范围将显示名称以 A
、B
、 开头的所有用户>C
、D
和 E
。
为了做到这一点,我试图查询 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/