correctly sort by numeric columns
This commit is contained in:
@@ -46,7 +46,7 @@ class TableController extends Controller
|
||||
$columns = Column::columnsFromJson($revision->columns);
|
||||
|
||||
$rq = $revision->rowsData($columns);
|
||||
if (count($columns)) $rq = $rq->orderByRaw("data->>'".$columns[0]->id."'");
|
||||
if (count($columns)) $rq = $rq->sortByCol($columns[0]);
|
||||
$rows = $rq->paginate(25, []);
|
||||
|
||||
return view('table.view', [
|
||||
|
||||
@@ -97,7 +97,9 @@ class TableEditController extends Controller
|
||||
{
|
||||
$revision = $changeset->revision;
|
||||
$columns = $changeset->fetchAndTransformColumns();
|
||||
$rows = $revision->rowsData($columns, true, false)->paginate(25, []);
|
||||
$rows = $revision->rowsData($columns, true, false)
|
||||
->sortByCol($changeset->fetchRevisionColumns()[0])
|
||||
->paginate(25, []);
|
||||
|
||||
return view('table.propose.edit-rows', [
|
||||
'changeset' => $changeset,
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Tables\Column;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
/**
|
||||
* Row in a data table
|
||||
*
|
||||
@@ -25,6 +28,25 @@ class Row extends BaseModel
|
||||
$this->data->_id = $value;
|
||||
}
|
||||
|
||||
public function scopeSortByCol(Builder $query, Column $column, $dir="asc")
|
||||
{
|
||||
$q = "data->>'".$column->id."'";
|
||||
if ($column->type == 'int' || $column->type == 'float') {
|
||||
$q = "CAST($q AS INTEGER)";
|
||||
}
|
||||
else if ($column->type == 'float') {
|
||||
$q = "CAST($q AS FLOAT)";
|
||||
}
|
||||
|
||||
if ($dir == 'asc') {
|
||||
$q .= ' ASC';
|
||||
} else {
|
||||
$q .= ' DESC';
|
||||
}
|
||||
|
||||
return $query->orderByRaw($q);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate a single Global Row ID, application-unique.
|
||||
*
|
||||
|
||||
@@ -132,7 +132,7 @@ abstract class BaseExporter
|
||||
$columns = $this->columns;
|
||||
|
||||
// TODO raw query to allow selecting aggregates, column subsets, etc
|
||||
if (count($columns)) $rq = $rq->orderByRaw("data->>'".$columns[0]->id."'");
|
||||
if (count($columns)) $rq = $rq->sortByCol($columns[0]);
|
||||
|
||||
while ($start < $count) {
|
||||
$rows = $rq->offset($start)->limit($chunkSize)->get()->toArray();
|
||||
|
||||
Reference in New Issue
Block a user