@@ -1028,45 +1028,47 @@ protected function applyScoutSearch(string $search_keyword): bool
1028
1028
protected function applyFixedOrderingToQuery (string $ keyName , array $ orderedKeys )
1029
1029
{
1030
1030
$ connection = $ this ->getConnection ();
1031
- $ driver_name = $ connection ->getDriverName ();
1031
+ $ driverName = $ connection ->getDriverName ();
1032
1032
1033
1033
// Escape keyName and orderedKeys
1034
- $ rawKeyName = $ keyName ;
1035
- $ keyName = $ connection ->escape ($ keyName );
1034
+ $ keyName = $ connection ->getQueryGrammar ()->wrap ($ keyName );
1036
1035
$ orderedKeys = collect ($ orderedKeys )
1037
1036
->map (function ($ value ) use ($ connection ) {
1038
1037
return $ connection ->escape ($ value );
1039
1038
});
1040
1039
1041
- switch ($ driver_name ) {
1040
+ switch ($ driverName ) {
1042
1041
case 'mysql ' :
1043
- // MySQL / MariaDB
1044
1042
$ this ->query ->orderByRaw ("FIELD( $ keyName, " .$ orderedKeys ->implode (', ' ).') ' );
1043
+
1045
1044
return true ;
1046
1045
1047
- /*
1048
- TODO: test implementations, fix if necessary and uncomment
1049
- case 'pgsql':
1050
- // PostgreSQL
1051
- $this->query->orderByRaw("array_position(ARRAY[" . $orderedKeys->implode(',') . "], $keyName)");
1052
- return true;
1046
+ case 'pgsql ' :
1047
+ case 'oracle ' :
1048
+ $ this ->query ->orderByRaw (
1049
+ 'CASE '
1050
+ .
1051
+ $ orderedKeys
1052
+ ->map (fn ($ value , $ index ) => "WHEN $ keyName= $ value THEN $ index " )
1053
+ ->implode (' ' )
1054
+ .
1055
+ ' END '
1056
+ );
1053
1057
1054
- */
1058
+ return true ;
1055
1059
1056
1060
case 'sqlite ' :
1057
1061
case 'sqlsrv ' :
1058
- // SQLite & Microsoft SQL Server
1059
- // Compatible with all SQL drivers (but ugly solution)
1060
-
1061
1062
$ this ->query ->orderByRaw (
1062
- "CASE ` $ rawKeyName ` "
1063
+ "CASE $ keyName "
1063
1064
.
1064
1065
$ orderedKeys
1065
- ->map (fn ($ value , $ index ) => "WHEN $ value THEN $ index " )
1066
+ ->map (fn ($ value , $ index ) => "WHEN $ value THEN $ index " )
1066
1067
->implode (' ' )
1067
1068
.
1068
- " END "
1069
+ ' END '
1069
1070
);
1071
+
1070
1072
return true ;
1071
1073
1072
1074
default :
0 commit comments