[php] Laravel Eloquent : 조인 된 테이블에서 특정 열만 가져 오는 방법

Eloquent에는 테마와 사용자라는 2 개의 조인 된 테이블이 있습니다.

테마 모델 :

public function user() {
  return $this->belongs_to('User');
}

사용자 모델 :

public function themes() {
  return $this->has_many('Theme');
}

내 Eloquent API 호출은 다음과 같습니다.

return Response::eloquent(Theme::with('user')->get());

테마의 모든 열 (괜찮음)과 사용자의 모든 열 (괜찮지 않음)을 반환합니다. 사용자 모델의 ‘사용자 이름’열만 필요합니다. 쿼리를 어떻게 제한 할 수 있습니까?



답변

모델을 변경하여 선택하려는 열을 지정하십시오.

public function user() {
  return $this->belongs_to('User')->select(array('id', 'username'));
}

그리고 여러분이 참여하고있는 칼럼을 포함하는 것을 잊지 마십시오.


답변

Laravel> = 5.2의 경우

사용 > 뽑은 () – 방법

$roles = DB::table('roles')->pluck('title');

단일 열의 값을 포함하는 배열을 검색하려면 pluck 메소드를 사용할 수 있습니다.


Laravel <= 5.1의 경우

사용 -> 목록 () 방법

$roles = DB::table('roles')->lists('title');

이 메서드는 역할 제목 배열을 반환합니다. 반환 된 배열에 대해 사용자 지정 키 열을 지정할 수도 있습니다.


답변

다음과 같이 get 매개 변수에 필드 배열을 제공 할 수 있습니다.

return Response::eloquent(Theme::with('user')->get(array('user.username'));

UPDATE (for Laravel 5.2) 문서 에서 다음을 수행 할 수 있습니다.

$response = DB::table('themes')
    ->select('themes.*', 'users.username')
    ->join('users', 'users.id', '=', 'themes.user_id')
    ->get();


답변

알아요, 당신은 Eloquent를 요청하지만 Fluent Query Builder로 할 수 있습니다

$data = DB::table('themes')
    ->join('users', 'users.id', '=', 'themes.user_id')
    ->get(array('themes.*', 'users.username'));


답변

이것이 내가하는 방법

$posts = Post::with(['category' => function($query){
        $query->select('id', 'name');
      }])->get();

user2317976의 첫 번째 답변이 나를 위해 작동하지 않았으며 laravel 5.1을 사용하고 있습니다.


답변

또 다른 옵션은 $hidden모델 의 속성을 사용 하여 표시하지 않을 열을 숨기는 것입니다. 이 속성을 즉시 정의하거나 모델에 기본값을 설정할 수 있습니다.

public static $hidden = array('password');

이제 JSON 응답을 반환 할 때 사용자 비밀번호가 숨겨집니다.

비슷한 방식으로 즉석에서 설정할 수도 있습니다.

User::$hidden = array('password');


답변

페이지 매김과 함께 사용

$data = DB::table('themes')
->join('users', 'users.id', '=', 'themes.user_id')
->select('themes.*', 'users.username')
->paginate(6);