2015-01-27 6 views
0

사용자와 자원의 belongsToMany 관계가 있습니다.모델의 모든 행이있는 laravel belongsToMany

사용자 :

public function resources() { 
     return $this->belongsToMany('Resource')->withPivot(array('value')); 
    } 

리소스 :

public function users() { 
     return $this->belongsToMany('User')->withPivot(array('value')); 
    } 

중간 테이블 resource_user입니다. 는 함께 다음 USER_ID가 resource_user 테이블입니다

$resources = Sentry::getUser()->resources()->get(); 

나는 모든 자료를 얻을 수있다. 지금까지 그렇게 좋았습니다. 그러나 중간 테이블에 user_id가 없어도 모든 자원 항목을 가져올 수 있습니까? 리소스 테이블에 3 개의 리소스가 있다고 가정 해 봅니다. ID 1, 2, 3 I가 중간 테이블의 ID 1로 한 사용자가 I은 단지 2 행 가지고

RESOURCE_ID 1 및 RESOURCE_ID 2 (1) 및 값 50

을 USER_ID 및 1 USER_ID 그리고 가치 100.

그러나 나는 모든 자원을 표시하고 거기에 사용자가 없다면 자원 객체가 있어야하지만 사용자의 관계 모델은 없어야합니다.

whereHas이이 문제와 관련이 없습니다.

RESOURCE_ID 1 USER_ID 1 값 50

RESOURCE_ID 2 USER_ID 1 값 (100)

RESOURCE_ID 3 :

그래서 내 목표는 3 개 결과,이 같은하지 2. 뭔가를 얻을 수 있습니다 user_id 0 값 0

내가 알아 낸 것 :

012 자원 모델에서 3,516,

는이 같은 함수 작성 :

# Get specific User value from resource 
    public function userValue() { 
     $res_user = DB::table('resource_user')->whereUserId(Sentry::getUser()->id)->whereResourceId($this->id)->first(); 
    if($res_user){ 
     return $res_user->value; 
    }else{ 
     return 0; 
    } 
} 

을하지만이에 대한 청소기 웅변 방법이 존재 궁금해? 그런 아이디어가 있습니까? 당신이 필터링 폐쇄를 추가 할 수 있습니다에만 열심 부하 현재 사용자에게

$resources = Resource::with('users')->get(); 

: 나는 "모든 자원은"당신은 단지 Resource 모델을 사용하여 얻을 수 있지만, 당신은 매우 잘 이해하면

+0

http://stackoverflow.com/questions/23328301/laravel-eloquent-left-join-where-null –

+0

나는 그것을 살펴볼 것이다. 감사. – goldlife

답변

2

는 잘 모르겠어요 :

$resources = Resource::with(array('users' => function($q) use ($userId){ 
    $q->where('user_id', $userId); 
}))->get(); 
+0

코드에 문제가 발생하면이 리소스와 관련된 모든 사용자를 얻게됩니다.하지만 .. 내가 생각 – goldlife

+0

... 자원 항목에 관련은 현재 기록 된 사용자가 원하는 나는 그것을 가지고 : '$ 자원 = 자원 : (배열 ('사용자'=> 기능 ($ q를) { $로 Q-> whereUserId (currentUser() -> ID) })) ->() 얻을, 나는 문제의 그 부분을 캐치하지 않았다 볼' – goldlife

+0

을 ... 네 그 것이 최선의 해결책 : 나는 내 대답을 업데이트 할거야. 답변에 대한 – lukasgeiter