Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel eloquent:使用multiple when()在多个动态条件下进行选择_Laravel_Eloquent - Fatal编程技术网

Laravel eloquent:使用multiple when()在多个动态条件下进行选择

Laravel eloquent:使用multiple when()在多个动态条件下进行选择,laravel,eloquent,Laravel,Eloquent,我有这样一个搜索功能: public function search(Request $request) { $data = $request->all(); $query = Member::select('members.*', 'profiles.belongs', 'profiles.position') ->leftJoin('profiles', 'members.id', '=', 'profiles.member_id'

我有这样一个搜索功能:

public function search(Request $request)
    {
        $data = $request->all();
    $query = Member::select('members.*', 'profiles.belongs', 'profiles.position')
        ->leftJoin('profiles', 'members.id', '=', 'profiles.member_id');
    if (!empty($data['belongs'])) {
        $query->where('profiles.belongs', 'like', '%' . $data['belongs'] . '%');
    }
    if (!empty($data['user_id'])) {
        $query->where('members.user_id', '=', $data['user_id']);
    }
    if (!empty($data['name'])) {
        $query->where('members.last_name', 'like', '%' . $data['name'] . '%')
                ->orWhere('members.first_name', 'like', '%' . $data['name'] . '%');
    }
    $query->groupBy('members.id');
    switch ($request->field) {
        case 'belongs':
            $query->orderBy('profiles.' . $request->field, $request->type);
            break;
        case 'position':
            $query->orderBy('profiles.' . $request->field, $request->type);
            break;
        case 'name':
            $query->orderBy('members.last_name', $request->type);
            $query->orderBy('members.first_name', $request->type);
            break;
        default:
            $query->orderBy('members.' . $request->field, $request->type);
    }
        $members = $query->paginate($request->number_of_item);
        return $members;
    }
user_id      first_name      last_name       belongs
1            a               b               org1
2            c               b               org2
3            c               a               null
如您所见,此搜索函数有3个输入:用户id、归属和名称。我原以为它将作为AND条件工作,但对于“name”输入,它就不是了。我有3个这样的用户:

public function search(Request $request)
    {
        $data = $request->all();
    $query = Member::select('members.*', 'profiles.belongs', 'profiles.position')
        ->leftJoin('profiles', 'members.id', '=', 'profiles.member_id');
    if (!empty($data['belongs'])) {
        $query->where('profiles.belongs', 'like', '%' . $data['belongs'] . '%');
    }
    if (!empty($data['user_id'])) {
        $query->where('members.user_id', '=', $data['user_id']);
    }
    if (!empty($data['name'])) {
        $query->where('members.last_name', 'like', '%' . $data['name'] . '%')
                ->orWhere('members.first_name', 'like', '%' . $data['name'] . '%');
    }
    $query->groupBy('members.id');
    switch ($request->field) {
        case 'belongs':
            $query->orderBy('profiles.' . $request->field, $request->type);
            break;
        case 'position':
            $query->orderBy('profiles.' . $request->field, $request->type);
            break;
        case 'name':
            $query->orderBy('members.last_name', $request->type);
            $query->orderBy('members.first_name', $request->type);
            break;
        default:
            $query->orderBy('members.' . $request->field, $request->type);
    }
        $members = $query->paginate($request->number_of_item);
        return $members;
    }
user_id      first_name      last_name       belongs
1            a               b               org1
2            c               b               org2
3            c               a               null
例如: 如果我使用user_id=1、belishing=org和name=a进行搜索,它将返回user 1和user 3(预期只返回user 1)。
我做错了什么?所有建议都将不胜感激,非常感谢。

事实证明非常简单。我自己解决了这个问题:

$query->where('members.last_name', 'like', '%' . $data['name'] . '%')
                ->orWhere('members.first_name', 'like', '%' . $data['name'] . '%');
致: