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端得到了什么?金额正确吗?