From 5774ba2a5637574f69252900d7a6296a9609f7e7 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 24 Apr 2018 20:32:53 +0200 Subject: [PATCH 1/8] added orderByTranslationScope --- src/Translatable/Translatable.php | 25 +++++++++++++++++++++++++ tests/ScopesTest.php | 12 ++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/Translatable/Translatable.php b/src/Translatable/Translatable.php index a502b66..904c704 100644 --- a/src/Translatable/Translatable.php +++ b/src/Translatable/Translatable.php @@ -674,6 +674,31 @@ public function scopeOrWhereTranslationLike(Builder $query, $key, $value, $local }); } + /** + * This scope sorts results by the given translation field. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string $key + * @param string $sortmethod + * + * @return \Illuminate\Database\Eloquent\Builder|static + */ + public function scopeOrderByTranslation(Builder $query, $key, $sortmethod = 'asc') + { + $translationTable = $this->getTranslationsTable(); + $localeKey = $this->getLocaleKey(); + $table = $this->getTable(); + $keyName = $this->getKeyName(); + + return $query->join($translationTable, function($join) use ($translationTable, $localeKey, $table, $keyName) { + $join->on($translationTable.'.'.$this->getRelationKey(), '=', $table.'.'.$keyName) + ->where($translationTable.'.'.$localeKey, $this->locale()); + }) + ->orderBy($translationTable.'.'.$key, $sortmethod) + ->select($translationTable.'.*', $table.'.*') + ->with('translations'); + } + /** * @return array */ diff --git a/tests/ScopesTest.php b/tests/ScopesTest.php index 5edc4c5..096d995 100644 --- a/tests/ScopesTest.php +++ b/tests/ScopesTest.php @@ -165,4 +165,16 @@ public function test_whereTranslationLike_filters_by_translation_and_locale() $this->assertSame(1, $result->count()); $this->assertSame('gr', $result->first()->code); } + + public function test_orderByTranslation_sorts_by_key_asc() + { + $result = Country::orderByTranslation('name')->get(); + $this->assertSame(2, $result->first()->id); + } + + public function test_orderByTranslation_sorts_by_key_desc() + { + $result = Country::orderByTranslation('name', 'desc')->get(); + $this->assertSame(1, $result->first()->id); + } } From e5f09c39eb591cf5d3f4cdd17c443640ea244ebe Mon Sep 17 00:00:00 2001 From: = Date: Tue, 24 Apr 2018 20:38:06 +0200 Subject: [PATCH 2/8] changed select statement --- src/Translatable/Translatable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Translatable/Translatable.php b/src/Translatable/Translatable.php index 904c704..b0b5da8 100644 --- a/src/Translatable/Translatable.php +++ b/src/Translatable/Translatable.php @@ -695,7 +695,7 @@ public function scopeOrderByTranslation(Builder $query, $key, $sortmethod = 'asc ->where($translationTable.'.'.$localeKey, $this->locale()); }) ->orderBy($translationTable.'.'.$key, $sortmethod) - ->select($translationTable.'.*', $table.'.*') + ->select($table.'.*') ->with('translations'); } From 29bdca7fc8369317dfbafa4c5cfc85f12865982a Mon Sep 17 00:00:00 2001 From: = Date: Tue, 24 Apr 2018 20:51:21 +0200 Subject: [PATCH 3/8] fixed styleCI --- src/Translatable/Translatable.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Translatable/Translatable.php b/src/Translatable/Translatable.php index b0b5da8..105e6a5 100644 --- a/src/Translatable/Translatable.php +++ b/src/Translatable/Translatable.php @@ -693,8 +693,7 @@ public function scopeOrderByTranslation(Builder $query, $key, $sortmethod = 'asc return $query->join($translationTable, function($join) use ($translationTable, $localeKey, $table, $keyName) { $join->on($translationTable.'.'.$this->getRelationKey(), '=', $table.'.'.$keyName) ->where($translationTable.'.'.$localeKey, $this->locale()); - }) - ->orderBy($translationTable.'.'.$key, $sortmethod) + })->orderBy($translationTable.'.'.$key, $sortmethod) ->select($table.'.*') ->with('translations'); } From 4a2b4b91736b4731fad5f2c2ec4dd3145746a42a Mon Sep 17 00:00:00 2001 From: Tom Witkowski Date: Tue, 15 May 2018 11:14:14 +0200 Subject: [PATCH 4/8] typehint $join --- src/Translatable/Translatable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Translatable/Translatable.php b/src/Translatable/Translatable.php index 105e6a5..c2c1d1a 100644 --- a/src/Translatable/Translatable.php +++ b/src/Translatable/Translatable.php @@ -690,7 +690,7 @@ public function scopeOrderByTranslation(Builder $query, $key, $sortmethod = 'asc $table = $this->getTable(); $keyName = $this->getKeyName(); - return $query->join($translationTable, function($join) use ($translationTable, $localeKey, $table, $keyName) { + return $query->join($translationTable, function(Builder $join) use ($translationTable, $localeKey, $table, $keyName) { $join->on($translationTable.'.'.$this->getRelationKey(), '=', $table.'.'.$keyName) ->where($translationTable.'.'.$localeKey, $this->locale()); })->orderBy($translationTable.'.'.$key, $sortmethod) From 3c35851a9dd046fdc6de4d51a18797fb579854df Mon Sep 17 00:00:00 2001 From: Tom Witkowski Date: Tue, 15 May 2018 11:16:08 +0200 Subject: [PATCH 5/8] update indentation --- src/Translatable/Translatable.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Translatable/Translatable.php b/src/Translatable/Translatable.php index c2c1d1a..56b6773 100644 --- a/src/Translatable/Translatable.php +++ b/src/Translatable/Translatable.php @@ -690,12 +690,15 @@ public function scopeOrderByTranslation(Builder $query, $key, $sortmethod = 'asc $table = $this->getTable(); $keyName = $this->getKeyName(); - return $query->join($translationTable, function(Builder $join) use ($translationTable, $localeKey, $table, $keyName) { - $join->on($translationTable.'.'.$this->getRelationKey(), '=', $table.'.'.$keyName) - ->where($translationTable.'.'.$localeKey, $this->locale()); - })->orderBy($translationTable.'.'.$key, $sortmethod) - ->select($table.'.*') - ->with('translations'); + return $query + ->join($translationTable, function(Builder $join) use ($translationTable, $localeKey, $table, $keyName) { + $join + ->on($translationTable.'.'.$this->getRelationKey(), '=', $table.'.'.$keyName) + ->where($translationTable.'.'.$localeKey, $this->locale()); + }) + ->orderBy($translationTable.'.'.$key, $sortmethod) + ->select($table.'.*') + ->with('translations'); } /** From 7b5ebb995b4673e069bbb5676a0d4df3441e44c4 Mon Sep 17 00:00:00 2001 From: Tom Witkowski Date: Thu, 28 Jun 2018 14:56:48 +0200 Subject: [PATCH 6/8] fix php cs --- src/Translatable/Translatable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Translatable/Translatable.php b/src/Translatable/Translatable.php index c8814d8..9b6bc00 100644 --- a/src/Translatable/Translatable.php +++ b/src/Translatable/Translatable.php @@ -694,7 +694,7 @@ public function scopeOrderByTranslation(Builder $query, $key, $sortmethod = 'asc $keyName = $this->getKeyName(); return $query - ->join($translationTable, function(Builder $join) use ($translationTable, $localeKey, $table, $keyName) { + ->join($translationTable, function (Builder $join) use ($translationTable, $localeKey, $table, $keyName) { $join ->on($translationTable.'.'.$this->getRelationKey(), '=', $table.'.'.$keyName) ->where($translationTable.'.'.$localeKey, $this->locale()); From 1ccd439a3dcad8438feaa556f2b4b9b391c469b0 Mon Sep 17 00:00:00 2001 From: Tom Witkowski Date: Tue, 24 Jul 2018 14:56:00 +0200 Subject: [PATCH 7/8] fix must be an instance of Illuminate\Database\Eloquent\Builder, instance of Illuminate\Database\Query\JoinClause given --- src/Translatable/Translatable.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Translatable/Translatable.php b/src/Translatable/Translatable.php index b36b0f4..0149f74 100644 --- a/src/Translatable/Translatable.php +++ b/src/Translatable/Translatable.php @@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Query\Builder as QueryBuilder; use Dimsav\Translatable\Exception\LocalesNotDefinedException; +use Illuminate\Database\Query\JoinClause; trait Translatable { @@ -694,7 +695,7 @@ public function scopeOrderByTranslation(Builder $query, $key, $sortmethod = 'asc $keyName = $this->getKeyName(); return $query - ->join($translationTable, function (Builder $join) use ($translationTable, $localeKey, $table, $keyName) { + ->join($translationTable, function (JoinClause $join) use ($translationTable, $localeKey, $table, $keyName) { $join ->on($translationTable.'.'.$this->getRelationKey(), '=', $table.'.'.$keyName) ->where($translationTable.'.'.$localeKey, $this->locale()); From 5cc09c5961813986d1b93ad45b2393734478ec81 Mon Sep 17 00:00:00 2001 From: Tom Witkowski Date: Tue, 24 Jul 2018 14:56:35 +0200 Subject: [PATCH 8/8] fix php cs --- src/Translatable/Translatable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Translatable/Translatable.php b/src/Translatable/Translatable.php index 0149f74..aa786d7 100644 --- a/src/Translatable/Translatable.php +++ b/src/Translatable/Translatable.php @@ -4,10 +4,10 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Query\JoinClause; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Query\Builder as QueryBuilder; use Dimsav\Translatable\Exception\LocalesNotDefinedException; -use Illuminate\Database\Query\JoinClause; trait Translatable {