Skip to content

Commit

Permalink
Relation sortable overrides are now called
Browse files Browse the repository at this point in the history
  • Loading branch information
veganista committed Mar 16, 2017
1 parent bd136fb commit 330f9ee
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
8 changes: 4 additions & 4 deletions src/ColumnSortable/Sortable.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,6 @@ private function queryOrderBuilder($query, array $sortParameters)
return $query;
}

if (method_exists($this, camel_case($column).'Sortable')) {
return call_user_func_array([$this, camel_case($column).'Sortable'], [$query, $direction]);
}

$explodeResult = SortableLink::explodeSortParameter($column);
if ( ! empty($explodeResult)) {
$relationName = $explodeResult[0];
Expand All @@ -79,6 +75,10 @@ private function queryOrderBuilder($query, array $sortParameters)
$model = $relation->getRelated();
}

if (method_exists($model, camel_case($column).'Sortable')) {
return call_user_func_array([$model, camel_case($column).'Sortable'], [$query, $direction]);
}

if (isset($model->sortableAs) && in_array($column, $model->sortableAs)) {
$query = $query->orderBy($column, $direction);
} elseif ($this->columnExists($model, $column)) {
Expand Down
20 changes: 19 additions & 1 deletion tests/ColumnSortableTraitTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,18 @@ public function testSortableOverridingQueryOrderBuilder()
$this->assertEquals($expectedQuery, $resultQuery);
}

public function testSortableOverridingQueryOrderBuilderOnRelation()
{
$sortParameters = ['sort' => 'profile.composite', 'order' => 'desc'];
$query = $this->user->newQuery();

$resultQuery = $this->invokeMethod($this->user, 'queryOrderBuilder', [$query, $sortParameters]);

$expectedQuery = $this->user->newQuery()->join('profiles', 'users.id', '=',
'profiles.user_id')->orderBy('phone', 'desc')->orderBy('address', 'desc')->select('users.*');

$this->assertEquals($expectedQuery, $resultQuery);
}

public function testSortableAs()
{
Expand Down Expand Up @@ -314,7 +326,8 @@ class Profile extends Model
*/
public $sortable = [
'phone',
'address'
'address',
'composite'
];


Expand All @@ -325,4 +338,9 @@ public function user()
{
return $this->belongsTo(User::class);
}

public function compositeSortable($query, $direction)
{
return $query->orderBy('phone', $direction)->orderBy('address', $direction);
}
}

0 comments on commit 330f9ee

Please sign in to comment.