【问题标题】:How to query related records only using where clause in laravel?如何仅使用laravel中的where子句查询相关记录?
【发布时间】:2017-05-08 14:56:48
【问题描述】:

我尝试仅使用以下查询来搜索属于特定用户/学校的学生。我在用户和学生之间创建了一对多的关系。一切似乎都很好,但是当我尝试搜索学生时,它也给了我属于其他用户的学生列表。

public function searchStudent(Request $request)
{
    $q = $request->q;
    $grades = Auth::user()->grades;
    $searchPupils = Student::where('user_id','=',Auth::user()->id)->where('name','LIKE','%'.$q.'%')->orWhere('email','LIKE','%'.$q.'%')->get();

    if(count($searchPupils) > 0)
    {
        return view('add-class', compact('grades'))->withDetails($searchPupils)->withQuery($q);
    }
    else
    {
        return view ('add-class', compact('grades'))->withMessage('No Details found. Try to search again !');
    }
}

我也试过了

$searchPupils = Auth::user()->students()->where('name','LIKE','%'.$q.'%')->orWhere('email','LIKE','%'.$q.'%')->get();

它仍然会搜索整个 Student 表。应该怎么做?

【问题讨论】:

    标签: php laravel


    【解决方案1】:
    • 问题出在您的查询条件中,请使用如下的高级 where 子句。

      $searchPupils =Student::where('user_id','=',Auth::user()->id)
                  ->where(function($query)use($q){
                         $query->where('name','LIKE','%'.$q.'%')
                              ->orWhere('email','LIKE','%'.$q.'%');
                    })->get();
      

    【讨论】:

    • 似乎还需要将 $q 变量传递给闭包。 :) 因此 $searchPupils =Student::where('user_id','=',Auth::user()->id) ->where(function($query) 使用 ($q){ $query->where( 'name','LIKE','%'.$q.'%') ->orWhere('email','LIKE','%'.$q.'%'); })->get() ;
    • 绝对是的,很抱歉这是我的错误,Azima
    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多