Development Tip

Laravel에서 키가 아닌 열 필드에 대한 고유 값을 얻는 방법은 무엇입니까?

yourdevel 2020. 12. 2. 22:02
반응형

Laravel에서 키가 아닌 열 필드에 대한 고유 값을 얻는 방법은 무엇입니까?


이것은 매우 쉬울 수 있지만 방법을 모릅니다.

특정 키가 아닌 열 필드에 대해 반복되는 값을 가질 수있는 테이블이 있습니다. 해당 열에 대한 고유 한 값이있는 행을 가져 오는 Query Builder 또는 Eloquent를 사용하여 SQL 쿼리를 작성하려면 어떻게해야합니까?

해당 열만 가져 오는 것이 아니라 다른 열 값과 연결되어 있으므로 distinct()실제로 작동하지 않을 수 있습니다. 그래서 그 질문은 기본적으로 distinct()매개 변수 허용하지 않는 쿼리에서 구별하려는 열을 지정하는 방법이 될 수 있습니까?


당신은 사용해야합니다 groupby. Query Builder에서 다음과 같이 할 수 있습니다.

$users = DB::table('users')
            ->select('id','name', 'email')
            ->groupBy('name')
            ->get();

Eloquent에서는 다음과 같이 쿼리 할 수도 있습니다.

$users = User::select('name')->distinct()->get();


유창하게 사용할 수 있습니다

$users = User::select('name')->groupBy('name')->get()->toArray() ;

groupBy는 실제로 고유 한 값을 가져옵니다. 실제로 groupBy는 동일한 값을 분류하여 집계 함수를 사용할 수 있습니다. 그러나이 시나리오에서는 집계 함수가 없습니다. 결과에 고유 한 값이있는 값을 선택하는 것입니다.


이 질문에 답하기에는 늦었지만 Eloquent를 사용하여 고유 한 레코드를 얻는 더 나은 방법은

$user_names = User::distinct()->get(['name']);

참고 groupBy위의 사용 포스트 그레스 작동하지 않습니다.

사용하는 distinct것이 아마도 더 나은 옵션 일 것입니다-예 $users = User::query()->distinct()->get();

사용하는 경우 query요청에 따라 모든 열을 선택할 수 있습니다.


데이터베이스 규칙에서 선택 필드가 집계 함수 외부에있는 것을 허용하지 않는 경우 그룹화 기준이 작동하지 않습니다. 대신 laravel 컬렉션을 사용하십시오 .

$users = DB::table('users')
        ->select('id','name', 'email')
        ->get();

foreach($users->unique('name') as $user){
  //....
}

$users = User::select('column1', 'column2', 'column3')->distinct()->get();테이블의 개별 행에 대해 세 개의 열을 모두 검색합니다. 원하는만큼 열을 추가 할 수 있습니다.


$users = Users::all()->unique('name');

나는이 방법이 (나에게) 매우 잘 작동하여 고유 한 값의 평평한 배열을 생성한다는 것을 알았습니다.

$uniqueNames = User::select('name')->distinct()->pluck('name')->toArray();

->toSql()이 쿼리 작성기 를 실행하면 다음 과 같은 쿼리가 생성되는 것을 볼 수 있습니다.

select distinct `name` from `users`

->pluck()켜 집 \ 수집 LIB (안 SQL 쿼리를 통해)에 의해 처리됩니다.

참고 URL : https://stackoverflow.com/questions/25228823/how-to-get-distinct-values-for-non-key-column-fields-in-laravel

반응형