【问题标题】:Laravel Filter with multiple values具有多个值的 Laravel 过滤器
【发布时间】:2018-09-14 06:48:57
【问题描述】:

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

用户模型

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

【问题讨论】:

    标签: laravel filter eloquent


    【解决方案1】:

    使用 When 让过滤变得简单:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 相同的结果.. 返回空数组
      【解决方案3】:

      试试这个

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

      【讨论】:

        猜你喜欢
        • 2020-09-17
        • 1970-01-01
        • 2022-07-08
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多