2017-11-26 1 views
1

2017년 11월 27일 7:24 오전 :
업데이트는 : 약간의 요구 사항을 변경하고 너무과 도움이 필요합니다 :
How to write this query in laravel query builder or eloquent or sql?이 관계 쿼리에 laravel eloquent를 어떻게 사용합니까?

참조 여기이 질문을 떠난다.
답변 해 주셔서 감사합니다.


나는 캠페인과 사용자간에 많은 관계가 있습니다. campaign_user 만 2 열 campaign_iduser_id 있습니다

Campagin.php

public function users() 
{ 
    return $this->belongsToMany('App\User'); 
} 

User.php

public function campaigns() 
{ 
    return $this->belongsToMany('App\Campaign'); 
} 

나는이 relatioship에 대한 피벗 테이블이있다.

다음으로 캠페인과 마커 사이에 일대 다 관계가 있습니다.
1 캠페인은 이제 URL을 /campaign/2/marker에, 나는 아래 모든 마커를 얻으려면

Campaign.php

public function markers() 
{ 
    return $this->hasMany('App\Marker', 'campaign_id'); 
} 

에게

public function campaign() 
{ 
    return $this->belongsTo('App\Campaign', 'campaign_id'); 
} 

Marker.php을 많은 마커

있다 현재 사용자에게 속한 캠페인 2

어떻게 이것을 달성하기 위해 웅변을 사용합니까? SQL에서

는 대략 다음과 같습니다 : 당신의 current 사용자에 따라 캠페인 exists 여부에 대한

select * from markers where campaign_id in (select campaign_id from campaigns 
left join campaign_user on (campaigns.id = campaign_user.campaign_id) 
where campaign_user.campaign_id = 2 and campaign_user.user_id = 3); 

답변

0

먼저 확인하시기 바랍니다. 그런 다음

$campaign = Campaign::where('id','=',$campaign_id)->whereHas('users',function($q){ 
     $q->where('id','=',$user_id); 
    })->first(); 

가져 오는 모든 MarkerCampaign와 -

if($campaign!=null){ 
     Marker::where('campaign_id','=',$campaign->id)->with('campaign')->get(); 
    } 
0

사용이 같은 whereHas() 중첩 :

Marker::whereHas('campaign', function($q) use ($campaignId) { 
    $q->where('id', $campaignId) 
     ->whereHas('users', function($q) { 
      $q->where('id', auth()->id()); 
     }); 
})->get(); 
관련 문제