Laravel 雄辩 如何检索登录用户的记录



>我创建了一个页面,显示当前登录教师的学生。用户可以键入搜索并根据搜索获取学生。

我写了这个函数:

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('');

最新更新