我试图通过姓名和电子邮件地址按姓名及其父母搜索玩家。出于某种原因,无论我输入的搜索词是什么,以下声明都会拉动所有玩家。
在下面的示例"监护人"引用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);
也许这只是漫长的一天......但我想我错过了一些东西。
答案 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);