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

时间:2015-12-10 11:23:05

标签: php mysql eloquent laravel-5.1

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

例如,如果此人的姓名以字母C开头,则用户将选择范围,例如A-E。因此,他会点击范围A-E,该范围将显示名称以ABCD开头的所有用户和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();

1 个答案:

答案 0 :(得分:1)

根据你找到的例子(在问题描述中提到),REGEXP的值应该在[{1}}这样的范围[]中,所以将你的第二个地方更改为'^[A-E].*$'并同时考虑大写和小写字母where('full_name', "REGEXP '^[".$request->range."].*$'")a-e

不同

<强>更新

我们在@ user3514160创建时,A-E条件应如下所示

where