带有多个值的Laravel过滤器

时间:2018-09-14 06:48:58

标签: laravel filter eloquent

当尝试仅使用用户名或电子邮件代码进行过滤时效果很好。但是当我尝试同时使用电子邮件和用户名进行过滤时,它将返回空值。

用户模型

public function scopeEmail($query, $email)
{
   $query->where('email','=', $email);

}
public function scopeUsername($query, $username)
{
    $query->where('username','=', $username);
}

控制器:

    public function filter(Request $request)
    {

      $q = User::query();
      $email = $request->input('email');
      $username= $request->input('username');
      if (isset($email))
      {
         // simple where here or another scope, whatever you like
         $q->Email($request->input('email'));
      }

      if (isset($username))
      {
          $q->Username($request->input('username'));
      }
         //execute
       $results = $q->get();
       return response()->json(['issError'=>0, 'errorCode'=>0,'message'=>$results],200);
    }

3 个答案:

答案 0 :(得分:1)

使用何时简化过滤器:

public function filter(Request $request)
{
   $q = User::query();
   $email = $request->input('email');
   $username= $request->input('username');

    $q->when($email,function ($query){
       $query->where('email',$email);
    });

    $q->when($username,function ($query){
       $query->where('username',$username);
    });

   $results = $q->get();
   return response()->json(['issError'=>0, 'errorCode'=>0,'message'=>$results],200);
}

答案 1 :(得分:0)

在if语句中使用简单的where

public function filter(Request $request)
{

  $q = User::query();
  $email = $request->input('email');
  $username= $request->input('username');
  if (isset($email))
  {
     // simple where here or another scope, whatever you like
     $q = $q->where('email', $request->input('email'));
  }

  if (isset($username))
  {
      $q = $q->where('username', $request->input('username'));
  }
     //execute
   $results = $q->get();
   return response()->json(['issError'=>0, 'errorCode'=>0,'message'=>$results],200);
}

答案 2 :(得分:0)

尝试一下

 public function filter(Request $request)
 {
   $q = User::query();
   $email = $request->input('email');
   $username= $request->input('username');
   if (!is_null($email))
   {
     $q = $q->where('email', $email);
   }

   if (!is_null($username))
   {
      $q = $q->where('username', $username));
   }

   $results = $q->get();
   return response()->json(['issError'=>0, 'errorCode'=>0,'message'=>$results],200);
}