2014-06-30 7 views
6

내 Laravel 4.2 웹 응용 프로그램에 UserGroup의 두 모델이 있습니다. 사용자는 여러 그룹의 구성원이 될 수 있으며 그룹은 많은 구성원을 가질 수 있습니다. 두 모델은 따라서 대다 관계로 연결된다 : 그러나,이 작동Laravel - 다 대다 관계에서 특정 열 선택

<?php 
    $groups = Group::with('users')->all(); 
?> 

: 내 API 자원의

<?php 
    class User extends Eloquent { 
     public function groups() 
     { 
      return $this->belongsToMany('Group'); 
     } 
    } 

    class Group extends Eloquent { 
     public function users() 
     { 
      return $this->belongsToMany('User'); 
     } 
    } 
?> 

하나는 응용 프로그램 내에서 사용할 수있는 모든 그룹이 나열 /groups입니다 JSON 응답은 users 테이블의 모든 필드를 포함합니다 (당연히 $hidden 속성에있는 필드 제외). 이 관계가 전체 테이블 대신 특정 필드 집합 만 반환하도록하겠습니다. 다른 관계 유형에서

내가 쉽게 다음과 같은 문이를 얻을 수 있습니다 (사용자가 하나 개의 그룹에 속할 수 있다는 것을 지금 가정) :

<?php 
    public function users() 
    { 
     return $this->hasMany('User')->select(['id', 'first_name', 'last_name']); 
    } 
?> 

그러나 위의 많은 대와 함께 작동하지 않는 것 많은 관계. 분명히 동일한 문제를 언급 한 this question을 보았습니다. Laravel 4.1에서는 이것이 가능하지 않은 것처럼 보입니다. 선택한 대답의 저자 인 tptcat은 Laravel의 Github 문제 추적기에 대한 문제에 대한 링크를 제공하지만 링크가 더 이상 작동하지 않으며 4.2에서이 문제가 아직 열려 있는지 여부를 파악할 수 없습니다.

누구나이 문제를 발견하고 성공적으로 해결할 수 있었습니까?

답변

0

all 메서드는 열 이름 배열을 매개 변수로 사용합니다.

원본을 보면 기본적으로 * (모든 것을 의미 함)이 필요합니다.

https://github.com/laravel/framework/blob/4.2/src/Illuminate/Database/Eloquent/Model.php#L624-L629

당신은 당신이 필요로하는 열을 전달할 수 있고는 지정된 열이 결과를 반환해야합니다.

<?php 

$groups = Group::with('users')->all(array('first_column', 'third_column')); 
+0

예. 정상적으로 작동합니다. 그러나 컨트롤러를 통해 다른 작업에서 비슷한 쿼리를 만들면 같은 배열을 모두 전달해야합니다. 나는 다른 종류의 관계로 할 수있는 것과 비슷한 해결책을 목표로 삼고 있었다. – cafonso

+0

모델에서 이러한 일반적인 쿼리를 수행하고 컨트롤러의 다른 동작에서 호출하는 함수를 언제든지 만들 수 있습니다. – Oni

0

다음과 같이 사용하십시오.

<?php 
    class User extends Eloquent { 
     public function groups() 
     { 
      return $this->belongsToMany('Group')->select(array('id', 'name')); 
     } 
    } 

    class Group extends Eloquent { 
     public function users() 
     { 
      return $this->belongsToMany('User')->select(array('id', 'name')); 
     } 
    } 
?> 
관련 문제