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 쿼리를 통해)에 의해 처리됩니다.
'Development Tip' 카테고리의 다른 글
Eclipse : Android SDK를 사용할 수 없으며 ADT가 오래되었다고 잘못 주장합니다. (0) | 2020.12.02 |
---|---|
Swift에서 Segue 준비 (0) | 2020.12.02 |
애플리케이션을 호스팅하는 dotnet.exe의 프로세스 ID를 확인하는 중에 오류가 발생했습니다. (0) | 2020.12.02 |
asp.net에서 데이터 테이블 열의 합계를 계산하는 방법은 무엇입니까? (0) | 2020.12.02 |
Entity Framework Code First에 엔터티의 자식 및 손자 요소를 어떻게 열심히 포함합니까? (0) | 2020.12.02 |