0

When trying to filter with only username or email code works fine.But when i am trying to filter with both email and username it returns empty.what i am missing

User model

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

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

Controller:

    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 Answers 3

1

Use When to make filter easy:

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);
}
Sign up to request clarification or add additional context in comments.

Comments

0

Use simple where in if statements

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);
}

1 Comment

Same result.. Returnig empty array
0

Try this

 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);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.