Laravel Filter с несколькими значениями - PullRequest
0 голосов
/ 14 сентября 2018

При попытке фильтрации с использованием только имени пользователя или кода электронной почты работает нормально. Но когда я пытаюсь отфильтровать как по электронной почте, так и по имени пользователя, возвращается пустое значение. Что мне не хватает

Модель пользователя

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

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Используйте Когда , чтобы упростить фильтрацию:

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);
}
0 голосов
/ 14 сентября 2018

Используйте простые where в операторах if

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...