2016-09-07 2 views
1

내가 만들려고 ((어디와 어디에서) OR (어디와 어디에서)) 오전 검색을 많이 후 나는이((어디와 어디에서) OR (어디와 어디에서)) Laravel 5.2

$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(); 
발견

$ 발신자$ receiver 변수가 정의되지 않았 음을 알려주고 있습니다. 도움이 필요합니다. 두 사용자 모두의 메시지를 표시하려고합니다. 첫 번째를 얻을 수 있다고 생각합니다. 그리고 어디에서) 혼자서, 그 다음 두 번째 것을 얻는다, 그리고, 나는 그들을 합병 할 것이다.

답변

3

$receiverClosure 내에 사용하려면 다음을 수행하십시오.

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

} 

해당 기능의 범위 내에있는 변수에 액세스 할 수 있습니다.

그래서 해결책이됩니다;

$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(); 
2

당신은 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();