Home » Php » php – ( (Where and Where) OR (Where and Where) ) Laravel 5.2

php – ( (Where and Where) OR (Where and Where) ) Laravel 5.2

Posted by: admin July 12, 2020 Leave a comment

Questions:

I am trying to create ( (Where and Where) OR (Where and Where) ) And after a lot of searching I found this

    $sender = \App\User::where('username','=',$username)->firstOrFail();
    $receiver = Auth::user();
    $messages = \App\Message::Where(function($query)
                              {
                                  $query->where("sender",$sender->id)
                                        ->where("receiver",$receiver->id);
                              })
                              ->orWhere(function($query)
                              {
                                  $query->Where("sender",$receiver->id)
                                        ->Where("receiver",$sender->id);
                              })
                              ->get();

But it’s showing me that the $sender and the $receiver variables are undefined , Any help please , I’m trying to show the messages of the both users, I thought also that I can get the first (where and where) alone and then get the second one then I’ll merge them.

How to&Answers:

To use $send and $receiver within a Closure do the following;

function ($query) use($sender, $receiver){

}

Allowing you to access the variables within the scope of that function.

So your solution becomes;

$messages = \App\Message::Where(function($query) use ($sender, $receiver)
                          {
                              $query->where("sender",$sender->id)
                                    ->where("receiver",$receiver->id);
                          })
                          ->orWhere(function($query) use ($sender, $receiver)
                          {
                              $query->Where("sender",$receiver->id)
                                    ->Where("receiver",$sender->id);
                          })
                          ->get();

Answer:

You need to pass the variables through with use:

$messages = \App\Message::Where(function($query) use ($sender, $receiver)
                          {
                              $query->where("sender",$sender->id)
                                    ->where("receiver",$receiver->id);
                          })
                          ->orWhere(function($query) use ($sender, $receiver)
                          {
                              $query->Where("sender",$receiver->id)
                                    ->Where("receiver",$sender->id);
                          })
                          ->get();