Exploent의 필드별 MySQL 순서
MySQL 쿼리에서 사용자 지정 정렬 순서를 정의하려면 다음과 같은 작업을 수행할 수 있습니다.
ORDER BY FIELD(language,'USD','EUR','JPN')
그것의 웅변적인 ORM 버전은 무엇일까요?
업데이트:
이 솔루션은 다양한 분야에서 주문할 때도 사용할 수 있습니다.
$events = Event::with( 'type', 'location' )
->orderBy( 'event_type_id' )
->orderByRaw( "FIELD(status, 'good', 'bad', 'hidden', 'active', 'cancelled')" )
->orderBy( 'date' );
둘 중 하나를 사용하는 것DB::raw()
아니면orderByRaw
직접 작동해야 함:
$models = Model::orderByRaw('FIELD(language, "USD", "EUR", "JPN")')->get();
// or
$models = Model::orderBy(DB::raw('FIELD(language, "USD", "EUR", "JPN")'))->get();
FIELD()의 두 번째 매개 변수에 implode 사용
$facilities = $query->with(['interest','city:id,name', 'state:id,name'])
->Active()
->whereIn('facility_id', $facilities_list)
->orderByRaw('FIELD(facility_id, '.implode(", " , $facilities_list).')')
->get();
조인을 사용하는 경우 열 앞에 테이블 이름을 간단히 추가할 수 있습니다.
Student::orderByRaw('FIELD(students.id, 3, 2, 1) DESC')->join('students_contact', 'students_contact.student_id', '=', 'students.id')
->get();
참고: 오른쪽에 있는 원시 쿼리에 열을 추가하기 시작합니다. 예를 들어 설명하겠습니다. 순서 7, 8, 9를 달성하려면 다음과 같이 하십시오.
orderByRaw('FIELD(students.id, 9, 8, 7) DESC')
그러면 데이터를 올바른 방법으로 가져옵니다.DESC 키워드도 목록 시작 부분이 아니라 목록 하단에 정렬된 데이터를 추가하기 때문에 추가했습니다.
언급URL : https://stackoverflow.com/questions/29659430/mysql-order-by-field-in-eloquent
'programing' 카테고리의 다른 글
git 저장소에서 bin 및 obj 폴더를 무시하려면 어떻게 해야 합니까? (0) | 2023.11.05 |
---|---|
sql join 문에서 table의 순서에 의미가 있습니까? (0) | 2023.11.05 |
malloc은 메모리를 할당하는 동안 더 많은 공간을 확보합니까? (0) | 2023.11.05 |
jQuery의 ajax success callback에서 textStatus가 "success"가 되지 않을 수 있습니까? (0) | 2023.11.05 |
angularJS $on 이벤트 핸들러 트리거 순서 (0) | 2023.11.05 |