>我创建了一个页面,显示当前登录教师的学生。用户可以键入搜索并根据搜索获取学生。
我写了这个函数:
public function search(){
$q = Input::get( 'q' );
if($q != ""){
$students = Students::where( 'user_id', '=', auth()->user()->id )->where( 'first_name', 'LIKE', '%' . $q . '%' )->orWhere ( 'subject', 'LIKE', '%' . $q . '%' )->orWhere ( 'class', 'LIKE', '%' . $q . '%' )->orWhere ( 'status', 'LIKE', '%' . $q . '%' )->paginate (15)->setPath ('');
$pagination = $students ->appends ( array (
'q' => Input::get ( 'q' )
) );
if (count ( $seq ) > 0)
return view ( 'students' )->with( 'seq' , $students )->withQuery ( $q );
}
return view ( 'students' )->withMessage ( 'No Details found. Try to search again !' );
}
但是当用户键入搜索值并点击提交时。将显示所有用户的所有学生,而不仅仅是登录用户。
我确实试图在每个orWhere
条款中都加入auth()->user()->id
,但它似乎不起作用。我把它放在哪里,这样只有登录的用户才能查看属于他的学生?
查询检查user_id
匹配还是搜索词匹配。
您必须使用闭包嵌套WHERE
约束:
$students = Students::where('user_id', '=', auth()->user()->id )
->where(function($query) use($q) {
$query->where('first_name', 'LIKE', '%' . $q . '%')
->orWhere('subject', 'LIKE', '%' . $q . '%')
->orWhere('class', 'LIKE', '%' . $q . '%')
->orWhere('status', 'LIKE', '%' . $q . '%');
})
->paginate(15)->setPath('');