Laravel whereHas()没有正确过滤where子句

时间:2015-10-11 00:56:49

标签: php laravel

我试图通过姓名和电子邮件地址按姓名及其父母搜索玩家。出于某种原因,无论我输入的搜索词是什么,以下声明都会拉动所有玩家。

在下面的示例"监护人"引用users表。

    $players = Player::where('first_name', 'LIKE', '%'.Input::get('q').'%')
        ->orWhere('last_name', 'LIKE', '%'.Input::get('q').'%')
        ->orWhereHas('guardian', function ($q) {
            $q->where('users.first_name', 'LIKE', '%'.Input::get('q').'%')
                ->orWhere('users.last_name', 'LIKE', '%'.Input::get('q').'%')
                ->orWhere('email', 'LIKE', '%'.Input::get('q').'%');
        })
        ->with('guardian')
        ->orderBy('last_name', 'ASC')
        ->orderBy('first_name', 'ASC')
        ->paginate(25);

也许这只是漫长的一天......但我想我错过了一些东西。

实施例: enter image description here

1 个答案:

答案 0 :(得分:1)

我认为你应该在你的wheres语句之前调用with()方法。 也许是这样的:

     $players = Player::with('guardian')
                ->where('first_name', 'LIKE', '%'.Input::get('q').'%')
                ->orWhere('last_name', 'LIKE', '%'.Input::get('q').'%')
                ->orWhereHas('guardian', function ($q) {
                    $q->where('users.first_name', 'LIKE', '%'.Input::get('q').'%')
                        ->orWhere('users.last_name', 'LIKE', '%'.Input::get('q').'%')
                        ->orWhere('email', 'LIKE', '%'.Input::get('q').'%');
                })
                ->orderBy('last_name', 'ASC')
                ->orderBy('first_name', 'ASC')
                ->paginate(25);