Left Join and get only null records from second table

  • STEP

    users:

    user_payments:

    app/Models/User.php

    
                    namespace App\Models;
      
                    use Illuminate\Contracts\Auth\MustVerifyEmail;
                    use Illuminate\Database\Eloquent\Factories\HasFactory;
                    use Illuminate\Foundation\Auth\User as Authenticatable;
                    use Illuminate\Notifications\Notifiable;
                    use Laravel\Sanctum\HasApiTokens;
                        
                    class User extends Authenticatable
                    {
                        use HasApiTokens, HasFactory, Notifiable;
                        
                        /**
                        * The attributes that are mass assignable.
                        *
                        * @var  string[]
                        */
                        protected $fillable = [
                            'name',
                            'email',
                            'password',
                        ]; 
                        
                        /**
                        * The attributes that should be hidden for serialization.
                        *
                        * @var  array
                        */
                        protected $hidden = [
                            'password',
                            'remember_token',
                        ];
                        
                        /**
                        * The attributes that should be cast.
                        *
                        * @var  array
                        */
                        protected $casts = [
                            'email_verified_at' => 'datetime',
                        ];
                        
                        /**
                        * Get the comments for the blog post.
                        */
                        public function payments()
                        {
                            return $this->hasMany(UserPayment::class);
                        }
                    }
    
                    

    app/Models/UserPayment.php

    
                    namespace App\Models;
      
      use Illuminate\Database\Eloquent\Factories\HasFactory;
      use Illuminate\Database\Eloquent\Model;
        
      class UserPayment extends Model
      {
          use HasFactory;
      }
    
    

    Example 1: Controller Code:

    
    namespace App\Http\Controllers;
      
      use Illuminate\Http\Request;
      use App\Models\User;
        
      class DemoController extends Controller
      {
          /**
           * Write code on Method
           *
           * @return  response()
           */
          public function index()
          {
              $users = User::select("*")
                              ->doesntHave("payments")
                              ->get();
        
              dd($users);
          }
      }
    
    
    Output
    
    
    Array
    
    (
    
        [0] => Array
    
            (
    
                [id] => 3
    
                [name] => Haresh
    
                [country_id] => 2
    
                [state_id] => 1
    
                [email] => savanihd2@gmail.com
    
                [email_verified_at] => 
    
                [current_team_id] => 
    
                [profile_photo_path] => 
    
                [created_at] => 2020-09-12T06:46:08.000000Z
    
                [updated_at] => 2020-09-18T12:04:09.000000Z
    
                [deleted_at] => 
    
            )
    
    )
    
            

    Example 2: Controller Code:

    
    namespace App\Http\Controllers;
      
      use Illuminate\Http\Request;
      use App\Models\User;
        
      class DemoController extends Controller
      {
          /**
           * Write code on Method
           *
           * @return  response()
           */
          public function index()
          {
              $month = '09';
              $users = User::select("*")
                              ->whereDoesntHave('payments', function (Builder $query) use($month){
                                  $query->whereMonth('payment_date', $month);
                              })
                              ->get();
        
              dd($users);
          }
      }
    
    
    Output
    
    Array
    
    (
    
        [0] => Array
    
            (
    
                [id] => 1
    
                [name] => Hardik Savani
    
                [country_id] => 2
    
                [state_id] => 1
    
                [email] => savanihd@gmail.com
    
                [email_verified_at] => 
    
                [current_team_id] => 
    
                [profile_photo_path] => 
    
                [created_at] => 2020-09-12T06:46:08.000000Z
    
                [updated_at] => 2020-09-18T12:04:09.000000Z
    
                [deleted_at] => 
    
            )
    
        [1] => Array
    
            (
    
                [id] => 3
    
                [name] => Haresh
    
                [country_id] => 2
    
                [state_id] => 1
    
                [email] => savanihd2@gmail.com
    
                [email_verified_at] => 
    
                [current_team_id] => 
    
                [profile_photo_path] => 
    
                [created_at] => 2020-09-12T06:46:08.000000Z
    
                [updated_at] => 2020-09-18T12:04:09.000000Z
    
                [deleted_at] => 
    
            )
    
    )