programing

Exploent의 필드별 MySQL 순서

stoneblock 2023. 11. 5. 10:52

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